Channel通道

func Count(ch chan int, value int){
    //ch <- value 写
    fmt.Println("im Count: ",value)
    ch <- value
    fmt.Println("write") 
}

func main() {
    //var chanName chan ElementType
    //eg:var ch chan int
    //eg:var m map[string] chan bool
    //eg: ch := make(chan int)

    chs := make([]chan int, 3)
    for i := 0; i < 3; i++ {
        chs[i] = make(chan int)
        go Count(chs[i], i)
    }

    for _, ch := range chs {
        //读
        val := <-ch
        fmt.Println("im main vlaue:", val)
    }
}

向channel写入数据通常会导致程序阻塞,直到有其他goroutine从这个channel中读取数据。
如果channel之前没有写入数据,那么从channel中读取数据也会导致程序阻塞,直到channel中被写入数据为止。
输出结果顺序不一定,但一定是有读才有写,先写后读。

API server listening at: 127.0.0.1:20592
im Count:  2
im Count:  0
write
im main vlaue: 0
im Count:  1
write
im main vlaue: 1
im main vlaue: 2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容