>백엔드 개발 >Golang >Go `select` 문에서 수신 또는 전송이 먼저 평가됩니까?

Go `select` 문에서 수신 또는 전송이 먼저 평가됩니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-15 00:48:02670검색

Is Receive or Send Evaluated First in a Go `select` Statement?

선택 문에서 수신 및 전송 작업의 역학 공개

채널 결과를 전달하려고 할 때 많은 사람들이 다음 구성을 선택합니다.

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

이 코드를 검토하면 다음과 같은 질문이 제기됩니다. 선택 작업의 어떤 측면이 평가되고 있는지, 수신 또는 전송 작업이 무엇인지?

Go 문서에서 이에 대한 정보를 얻을 수 있습니다.

receive 작업의 채널 피연산자와 send 문의 오른쪽 표현식은 "select" 문을 입력할 때 소스 순서대로 정확히 한 번 평가됩니다.

이는 주어진 예에서 다음을 의미합니다. , <-ch1 표현식이 즉시 평가되고 select 문은 ch2로의 전송이 실행될지 아니면 대체 사례가 실행될지 결정하기 위해 진행됩니다.

효과적으로 이 방법을 사용하면 ch1의 수신을 즉시 차단할 수 있습니다. 선택은 궁극적으로 ch2의 후속 전송을 제어합니다. 그러나 대체 사례를 선택하더라도 ch1의 값은 여전히 ​​소비되고 폐기된다는 점에 주목할 가치가 있습니다.

위 내용은 Go `select` 문에서 수신 또는 전송이 먼저 평가됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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