select는 Go 언어에서 일반적으로 사용되는 키워드로, 채널과 관련된 IO 작업을 모니터링하는 데 사용됩니다.
실행할 수 있는 사례가 여러 개 있는 경우 Select는 무작위로 공정하게 하나를 선택하여 실행합니다. 다른 것들은 처형되지 않습니다. (추천 학습: go)
그렇지 않은 경우:
기본절이 있으면 해당 문이 실행됩니다.
기본 조항이 없으면 일부 통신이 실행될 때까지 선택이 차단됩니다. Go는 채널이나 값을 재평가하지 않습니다.
기본 사용법
//select基本用法 select { case <- chan1: // 如果chan1成功读到数据,则进行该case处理语句 case chan2 <- 1: // 如果成功向chan2写入数据,则进行该case处理语句 default: // 如果上面都没有成功,则进入default处理流程
하나 이상의 IO 작업을 완료할 수 있는 경우 Go 런타임 시스템은 실행할 작업을 무작위로 선택합니다. 그렇지 않은 경우 기본 분기 문이 실행됩니다. 기본값은 None입니다. 하나 이상의 IO 작업이 수행될 때까지 select 문이 차단됩니다.
start := time.Now() c := make(chan interface{}) ch1 := make(chan int) ch2 := make(chan int) go func() { time.Sleep(4*time.Second) close(c) }() go func() { time.Sleep(3*time.Second) ch1 <- 3 }() go func() { time.Sleep(3*time.Second) ch2 <- 5 }() fmt.Println("Blocking on read...") select { case <- c: fmt.Printf("Unblocked %v later.\n", time.Since(start)) case <- ch1: fmt.Printf("ch1 case...") case <- ch2: fmt.Printf("ch1 case...") default: fmt.Printf("default go...") }
현재 시간이 아직 3초에 도달하지 않았으므로 위 코드를 실행하세요. 따라서 현재 프로그램이 기본적으로 실행됩니다.
위 내용은 golang 선택이 차단되지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!