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!") }

 

posted @ 2017-12-01 16:59  你的KPI完成了吗  阅读(98)  评论(0)    收藏  举报