Golang에서 Select 문을 사용하는 방법?

Golang Eseo Select Mun Eul Sayonghaneun Bangbeob



문 선택 Golang에서 개발자는 Go 루틴, 채널 및 데이터 스트림 간에 동기화하고 통신할 수 있습니다. Go 프로그램이 한 번에 여러 채널 작업을 대기하고 준비된 첫 번째 작업을 실행할 수 있습니다.

이 기사에서는 사용 방법을 살펴 보겠습니다. 문 선택 Golang에서 Go 프로그램에서 병렬성, 동시성 및 동기화를 달성하는 데 도움이 되는 예제를 제공합니다.

Golang에서 Select 문을 사용하는 방법?

switch 문과 유사하게, 문 선택 여러 표현식 중에서 하나의 표현식을 선택하고 실행할 수 있지만 선택하다 스위치는 문 선택 대기 원칙에 따라 작동합니다. 문 선택 통신이 완료될 때까지 실행되지 않습니다.







여기서 통신이란 주어진 채널을 통해 데이터를 송수신하는 것을 의미합니다. 통신이 완료되면 다음 확인이 수행되어 Go 언어의 select 문이 전적으로 채널에 종속되어 있음을 확인할 수 있습니다.



Select 문의 구문

에 사용되는 간단한 구문 문 선택 Go 언어를 사용하는 방법은 다음과 같습니다.



선택하다 {
사례 channel_1 :
// channel_1이 준비되었을 때 실행할 코드
사례 channel_2 :
// channel_2가 준비되었을 때 실행할 코드
사례 채널_3 :
// channel_3이 준비되었을 때 실행할 코드
사례 채널_4 :
// channel_4가 준비되었을 때 실행할 코드
기본 :
// 채널이 준비되지 않은 경우 실행할 코드
}

여기:





  • 문 선택 , 각 케이스는 수신 작업 또는 전송 작업일 수 있는 채널 작업을 나타냅니다.
  • 그만큼 문 선택 경우 중 하나가 준비될 때까지 기다린 다음 관련 사례 문을 실행합니다.
  • 실행할 준비가 된 채널이 여러 개인 경우 임의로 채널을 선택합니다.

Golang에서 채널을 만드는 방법

Go에서 채널을 생성하기 위해 사용자는 make 기능을 사용할 수 있습니다. 키워드를 입력하고 채널 유형을 지정합니다. 채널 유형은 int, 문자열 또는 기타일 수 있습니다.

채널 := 만들다 ( 짱 유형 )

Golang에서 Select 문 구현

여기서는 기본 사용법을 익히는 데 도움이 되는 몇 가지 예를 제공합니다. 문 선택 골랑에서.



예 1

다음 예는 문 선택 두 채널이 실행될 준비가 되었을 때 어떻게 수행되는지 보여줍니다.

패키지 메인

수입 'fmt'

기능 메인 ( ) {

하나에 := 만들다 ( 정수 )

str := 만들다 ( 찬 문자열 )

go chan_num ( 하나에 )

이동 chan_str ( str )

선택하다 {

사례 Ch1 := <- 하나에 :

fmt. Println ( '채널 데이터:' , Ch1 )

사례 Ch2 := <- str :

fmt. Println ( '채널 데이터:' , Ch2 )

}

}

func chan_num ( 넘짱 정수 ) {

하나에 <- 67

}

func chan_str ( str 찬 문자열 ) {

str <- '리눅스'

}

위의 예에서는 두 개의 채널을 만들었습니다. 하나에, 그리고 str Go 함수를 사용했습니다. 찬_번호() num 채널로 데이터를 보내고 chan_str() str 채널에 데이터를 보냅니다. 프로그램에는 두 개의 다른 채널이 포함되어 있기 때문에 문 선택 그들 중 하나를 실행합니다.

사례 Ch1 에서 값을 읽습니다. 숫자 채널 표시합니다. 마찬가지로 케이스 Ch2 에서 값을 반환합니다. str 채널. 위의 프로그램은 사용할 준비가 된 채널의 출력을 반환합니다. 산출

예 2

채널에 지연을 추가하고 다른 채널의 출력을 반환하려면 다음을 사용할 수 있습니다. 시간.수면() 지정된 채널에서 작동합니다. 이렇게 하면 다른 채널의 출력을 콘솔에 인쇄할 수 있습니다. 다음은 그러한 경우의 예입니다.

패키지 메인

수입 (

'fmt'

'시간'

)

기능 메인 ( ) {

하나에 := 만들다 ( 정수 )

str := 만들다 ( 찬 문자열 )

go chan_num ( 하나에 )

이동 chan_str ( str )

선택하다 {

사례 Ch1 := <- 하나에 :

fmt. Println ( '채널 데이터:' , Ch1 )

사례 Ch2 := <- str :

fmt. Println ( '채널 데이터:' , Ch2 )

}

}

func chan_num ( 넘짱 정수 ) {

하나에 <- 67

}

func chan_str ( str 찬 문자열 ) {

시간 . ( 5 * 시간 . 두번째 )

str <- '리눅스'

}

위에 주어진 코드에서 우리는 시간.수면() 내부 기능 chan_str() 기능. 처음 5초 동안은 num 채널만 실행할 준비가 됩니다. 그 결과, 문 선택 사례를 실행 Ch1 .

산출

메모: 두 채널 모두에 지연을 추가하여 채널 실행을 지연시킬 수 있습니다.

결론

그만큼 문 선택 Go에서는 통신이 완료될 때까지 명령문이 실행되지 않는 대기 원칙을 사용하여 여러 표현식 중에서 하나의 표현식을 선택하고 실행할 수 있습니다. 위에서 언급한 지침에는 다음이 포함됩니다. 문 선택 기본 구문 및 예제.