channel】 通道【golang】


创建一个无缓冲的bool型Channel

c := make(chan int)

缓冲通道,容量为10

c := make(chan string, 10)

从Channel接收一个值,如果channel关闭或没有数据,那么ok将被置为false

x, ok = <- c

发送到一个空的通道,会永远阻塞

var c chan string

c <- "Hello, World!" 向一个Channel发送一个值

致命错误:所有goroutine都处于休眠状态-死锁!

从一个无的通道接收信息时,会永远阻塞

var c chan string

fmt.Println(<-c) 从一个Channel中接收一个值

致命的错误:所有的goroutines都处于睡眠状态--死锁!

向一个封闭的通道发送的信息会引起恐慌

var c = make(chan string, 1)

c <- "Hello, World!"

close(c)

c <- "Hello, Panic!"

恐慌:在封闭通道上发送

从一个封闭的通道接收,立即返回零值

var c = make(chan int, 2)

c <- 1

c <- 2

close(c)

for i := 0; i < 3; i++ {

    fmt.Printf("%d ", <-c)

}

1 2 0

for循环读取channel

for i := range ch { ch关闭时,for循环会自动结束

    println(i)

}

防止读取超时

select {

    case <- time.After(time.Second*2):

        println("read channel timeout")

    case i := <- ch:

        println(i)

}

防止写入超时

select {

    case <- time.After(time.Second *2):

        println("write channel timeout")

    case ch <- "hello":

        println("write ok")

}


腾图小抄 SCWY.net v0.03 小抄561条 自2022-01-02访问366340次