go 管道简单入门及注意事项:管道创建,发送、接受数据,管道关闭

1. 使用make命令创建channel
// 未设置缓冲区, 只能放一个,不读取再次赋值则会阻塞
c1 := make(chan int)
// 设置缓冲区,10个缓冲区就可以放10个值,不读取则无法放入第11个值
c2 := make(chan int, 10)

chan + int 设置channel类型为int,可以设置任意类型的channel

2. 发送数据(send)
ch <- 1
  • 无缓冲区的channel只有在receiver准备好后send才被执行。如果有缓冲区,并且缓冲区未满,则send会被执行。
3. 读取channel数据(receive)
i := <-c
  • 从一个nil channel中接收数据会一直被block。

  • 从一个被close的channel中接收数据不会被阻塞,而是立即返回,接收完已发送的数据后会返回元素类型的零值(zero value)。

// 可以使用一个额外的返回参数来检查channel是否关闭。
x, ok := <-ch
//如果OK 是false,表明接收的x是产生的零值,这个channel被关闭了或者为空。
4. 关闭管道(close)
  • 使用close()方法对管道进行关闭

  • 如果channel c已经被关闭,继续往它发送数据会导致panic: send on closed channel:

  • 从已关闭的channel中可以读取出已发送的数据,读完后继续读取会读到零值。

  • 通过range读取已关闭的channel,读出已发送数据后for循环会跳出:

c := make(chan int, 10)
c <- 1
c <- 2
close(c)
for i := range c {
	fmt.Println(i)
}

​ 通过i, ok := <-c可以查看Channel的状态,判断值是零值还是正常读取的值。(同点3)

参考:   https://www.runoob.com/w3cnote/go-channel-intro.html
练习:   https://exercism.org/tracks/go/exercises/parallel-letter-frequency
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了迹奇有没

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值