모든 채널이 닫힐 때 Select 문에서 벗어나기
질문:
방법 모든 채널이 닫히고 소비가 중단될 때까지 채널을 통해 데이터를 생성하는 여러 개의 독립적인 고루틴을 효율적으로 반복할 수 있습니까? 채널이 출력을 소진하면?
답변:
select 문을 사용하면 일반적으로 여러 채널의 데이터가 소비되지만 모든 채널이 언제 닫히는지 확인하는 것은 어려울 수 있습니다. 이를 처리하는 간결한 방법은 다음과 같습니다.
for { select { case p, ok := <-mins: if !ok { // channel is closed mins = nil // set channel to nil } else { fmt.Println("Min:", p) } case p, ok := <-maxs: if !ok { maxs = nil } else { fmt.Println("Max:", p) } } if mins == nil && maxs == nil { break // exit loop when all channels are nil } }
여기서 비결은 닫힌 채널을 nil로 설정하여 더 이상 선택하지 않도록 하는 것입니다. 이렇게 하면 select 문이 계속 실행되고 나머지 열려 있는 채널을 확인할 수 있습니다.
장점:
위 내용은 모든 채널이 닫힐 때 Select 문을 어떻게 중단합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!