>백엔드 개발 >Golang >모든 채널이 닫힐 때 Select 문을 어떻게 중단합니까?

모든 채널이 닫힐 때 Select 문을 어떻게 중단합니까?

DDD
DDD원래의
2024-11-15 20:41:03245검색

How to Break Out of a Select Statement When All Channels Are Closed?

모든 채널이 닫힐 때 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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