Golang. channel的关闭
2023-12-17 12:24:29
使用内置函数close可以关闭channel,当channel关闭后,就不能再向channel写数据了,但是仍然可以从channel中读取数据。
一旦将channel关闭了,只能读不能写。相当于关闭管道就数据不能进入到队列里面了,只能进行读操作,只读不写。
channel支持for-range的方式进行遍历,请注意两个细节
1)在遍历时,如果channel没有关闭,则回出现deadlock的错误
2)在遍历时,如果channel已经关闭,则会正常遍历数据,遍历完后,就会退出遍历。
下面这种遍历方式肯定是错误的,每次取出来数据长度都会减1,容量方式也一样不是真实的长度,所以只能使用for rang方式。?
func main() {
intChan := make(chan int, 3)
intChan <- 100
intChan <- 200
close(intChan) //关闭管道
//当管道关闭之后,读取数据是没有问题的
num := <-intChan
fmt.Println(num)
//从管道里面依次取出这样的值,管道是先进先出的队列,值也是按照顺序取出来的
for v := range intChan {
fmt.Println(v)
}
}
文章来源:https://blog.csdn.net/qq_34556414/article/details/135042304
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!