>백엔드 개발 >Golang >golang 선택이 차단되지 않습니까?

golang 선택이 차단되지 않습니까?

(*-*)浩
(*-*)浩원래의
2019-12-17 11:01:435295검색

golang 선택이 차단되지 않습니까?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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