>백엔드 개발 >Golang >Golang에서 여러 채널을 동시에 읽는 방법은 무엇입니까?

Golang에서 여러 채널을 동시에 읽는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-07 10:31:03901검색

How do you read from multiple channels simultaneously in Golang?

Golang에서 동시에 여러 채널 읽기

Golang의 세계에 입문하면서 Any-to를 만드는 작업에 직면할 수 있습니다. -여러 고루틴이 단일 대상에 공급되는 하나의 채널. 이 기사에서는 Golang에서 이를 달성하기 위한 전략을 탐구할 것입니다.

예제 시나리오

두 개의 고루틴 numgen1 및 numgen2가 동시에 숫자를 생성하고 이를 작성하는 시나리오를 생각해 보세요. 채널 num1과 num2입니다. 목표는 num1과 num2에서 받은 숫자를 합산하고 그 결과를 채널 합계에 기록하는 별도의 프로세스인 addnum을 만드는 것입니다.

Select 문 사용

여러 채널에서 동시에 읽으려면 select 문을 활용할 수 있습니다. 선택 블록 내에서 각 케이스는 읽으려는 채널을 나타냅니다. 메시지를 받은 첫 번째 사례는 해당 코드 블록을 실행합니다.

다음은 select 문을 사용하는 예입니다.

func main() {

  c1 := make(chan int)
  c2 := make(chan int)
  out := make(chan int)

  go func(in1, in2 <-chan int, out chan<- int) {
    for {
      sum := 0
      select {
      case sum = <-in1:
        sum += <-in2

      case sum = <-in2:
        sum += <-in1
      }
      out <- sum
    }
  }(c1, c2, out)
}

이 goroutine은 무기한 실행되며 채널에서 값을 지속적으로 읽고 합산합니다. c1과 c2. 출력 채널은 합계를 소비하는 수단을 제공합니다. 고루틴을 종료하려면 c1과 c2를 모두 닫은 다음 종료하기 전에 닫아야 합니다.

위 내용은 Golang에서 여러 채널을 동시에 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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