>백엔드 개발 >Golang >`select`는 `case ch2에서 수신 또는 전송을 선택합니까?

`select`는 `case ch2에서 수신 또는 전송을 선택합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-15 07:58:02814검색

Does `select` Choose to Receive or Send in `case ch2

단일 Case 문 내에서 수신 및 보내기

Go에서는 동일한 Select Case 문 내에서 수신 및 전송 작업을 결합할 수 있습니다. 이 코드 조각에서 볼 수 있듯이:

for {
    select {
    ...
    case ch2 <- (<-ch1):
    ...
    }
}

이 코드는 채널 ch1의 결과를 전달하는 것을 목표로 합니다. ch2 채널로. 그러나 ch1에서 수신하거나 ch2로 전송하는 작업 중에서 select 문이 on을 선택하는지에 대한 의문이 제기됩니다.

선택 프로세스

Go에서 설명한 대로 문서화, select 문 입력 시:

  • receive 작업 및 send 문의 채널 표현식이 평가되어 채널 집합이 생성됩니다. 전송에 해당하는 값과 함께 수신 또는 전송.
  • 모든 부작용은 이 평가 중에 즉시 발생합니다.
  • 짧은 변수를 사용하는 수신 작업의 왼쪽에 있는 표현식 선언이나 할당은 평가되지 않습니다.

주어진 의미 코드

제공된 예에서 다음이 발생합니다.

case ch2 <- (<-ch1):
  • <-ch1 표현식이 평가되어 ch1의 수신을 즉시 차단합니다.
  • 결과 값은 할당 왼쪽의 임시 변수에 저장됩니다.
  • select 문 그런 다음 ch2의 전송 작업이 발생하는지 여부를 제어합니다.

따라서 select 문은 수신된 값을 ch1에서 ch2로 보낼지 아니면 다른 경우를 처리할지 선택합니다.

부작용

ch1의 수신 작업이 최종적으로 선택되지 않더라도 값은 여전히 소비되고 폐기됩니다. 이 동작은 중요할 수 있으므로 이 패턴을 사용할 때 고려해야 합니다.

위 내용은 `select`는 `case ch2에서 수신 또는 전송을 선택합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.