channel通道的一些细节

在go语言中需要使用内置函数make来创建一个通道
make的第一个参数是关键字chan,之后跟着允许通道交换的数据类型。如果创建的是一个有缓存的通道,之后还要再第二个参数指定缓存区的大小。

//无缓存的整形通道
unbuffered:=make(chan int)

//有缓存的字符串通道
buffered:=make(chan string,10)

向通道发送值或指针需要用到 <- 操作符

//创建一个有缓存的字符串通道
buffered:=make(chan string,10)
//通过通道发送一个字符串
buffered<-"Gopher"
//从通道接受一个字符串
value:=<-buffered

注:
无缓冲的通道是指在接收前没有能力保存任何值得通道,这种通道要求发送goroutine和接收goroutine同时准备好,才能完成发送和接收的操作,如果两个goroutine没有同时准备好,通道会导致先执行发送或接收的goroutine阻塞等待,这种对通道进行发送和接受的行为本身就是同步的,其中任意一个操作都无法离开另一个操作而单独存在。
有缓冲通道是一个在被接受前能存储一个或多个值的通道。这种类型的通道并不强制要求goroutine之间必须同时完成发送和接收,通道会阻塞发送和接收的动作也会不同,只有在通道没有要接收的值时,接收动作才会阻塞,只有通道没有可用缓存区容纳被发送的值时,发送动作才会被阻塞,这导致有缓存的通道和无缓存的通道之间的一个很大的不同:无缓冲的通道保证进行发送和接收的goroutine会在同一时间进行数据的交换,有缓冲的通道没有这种保证。

	关闭通道:当通道关闭后,goroutine依旧可以从通道接收数据,但不能再向通道里发送数据。
					从一个已经关闭且没有数据的通道里获取数据,总会立刻返回,并返回一个通道类型的零值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值