go语言学习笔记:关闭channel
往一个关闭了的channel中写入的时候会出现panic;而从一个关闭的channel中读入数据的时候却只是返回0值。这就让读入的协程不知道什么时候通道已经关闭。
可以使用以下的方法来判断,但是channel读入到底返回多少值呢?如果返回两个,那么为什么我们可以只接收一个?平常返回两个值的函数忽略的话都需要使用“_”。
让人迷惑
package main import( "fmt" "time" ) func main(){ ch := make(chan int) go func(){ ch <- 2 fmt.Println("send 2") close(ch) }() go func() { for i:=1; i<10; i++ {
//val := <-ch //这样的写法也可以,但是通道关闭它浑然不知。 val,ok := <-ch //返回两个值,这可能很常用. if ok { fmt.Println("recv ", val) } } }() time.Sleep(1e9) fmt.Println("finished!") }

浙公网安备 33010602011771号