여러 채널이 닫힐 때 Select 문 이스케이프
동시 입력 처리를 위해 select 문을 활용하는 경우 루프를 종료하는 것이 바람직할 수 있습니다. 모든 입력 채널이 닫혔을 때. 제시된 코드 조각은 이 시나리오를 처리하기 위해 기본 사례를 사용하려고 시도하지만 정확한 감지를 보장할 수 없기 때문에 충분하지 않습니다.
더 효과적인 솔루션은 select 문 내에서 닫힌 채널을 무효화하는 것입니다. 채널이 닫히면 더 이상 선택할 수 없음을 나타내는 nil 값이 할당됩니다. 이 접근 방식을 사용하면 활성 채널이 있는 동안에만 루프가 계속됩니다.
기본적으로 수정된 코드는 다음과 같습니다.
for { var x, ok = <-ch1 // Receive from ch1 fmt.Println("ch1", x, ok) if !ok { ch1 = nil // Nil closed channel } x, ok = <-ch2 // Receive from ch2 fmt.Println("ch2", x, ok) if !ok { ch2 = nil // Nil closed channel } if ch1 == nil && ch2 == nil { break // Exit loop when all channels are nil } }
이 솔루션은 채널 폐쇄 감지를 우아하게 처리합니다. 성능에 대한 우려 없이 간결하고 효율적인 구현을 보장합니다. 입력 채널 수가 늘어나도 나일링 접근 방식은 여전히 간단하므로 여러 입력을 처리할 수 있도록 확장 가능합니다.
위 내용은 모든 채널이 닫힐 때 Select 문을 정상적으로 종료하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!