golang chan是否关闭


本文摘自php中文网,作者(*-*)浩,侵删。

chan是golang中非常重要的一个东西,用来做goroutine的通信,因为golang程序必然会有多个goroutine,如何同步这些goroutine就很重要了。

使用chan时有几个心得: (推荐学习:go)

首先,永远是符号<-进行读取或者写入,譬如v,ok := <-c是读取,而c <- v是写入。

其次,读取时,如果没有ok,也是可以读取的。不过如果closed也是能读的,没有赋值而已;如果要知道是否closed得加ok,也就是除非chan永远不关闭,否则读取应该用v,ok := <-c而不是用v := <-c的方式。

再次,不能向closed的chan写入,所以一般写入时需要用一个信号的chan(一般buffer为1),来判断是否写入或者放弃,用select判断是写入成功了,还是正在关闭需要放弃写入。

最后,如果closed后,chan有数据,ok还是true的,直到chan没有数据了才false。

当一个chanel被关闭后,再取出不会阻塞,而是返回零值

1

2

3

4

5

6

7

8

9

10

11

12

package main

  

import "fmt"

  

func main() {

    c := make(chan int, 5)

    c <- 123

    close(c)

      

    fmt.Println(<-c)

    fmt.Println(<-c)

}

输出

1

2

123

0

以上就是golang chan是否关闭的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang 实现 rsa 的加密解密

手撸golang 行为型设计模式 备忘录模式

golang实现二倍均值算法和抢红包的方法

go语言如何判断变量是slice还是array

golang怎么判断字符串是否为空

我的golang error 最佳实践

golang中cat输出乱码问题解决方法

go实现ssh远程执行命令

golang sync.waitgroup 在for循环内取值错误

练习笔记

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...