go channel用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

go channel用法
Go语言中的channel(通道)用于在协程(goroutine)之间进行通信和同步。

1. 创建channel:
channel可以通过make函数来创建,必须指定通道内元素的类型,例如:
`ch := make(chan int)` // 创建一个整型channel
2. 发送与接收数据:
使用`<-`操作符进行发送和接收数据:
- 将数据发送到channel:`ch <- 10`,将值10发送到channel ch上
- 从channel接收数据:`x := <-ch`,从channel ch接收一个值并赋给变量x
3. 管道阻塞:
- 发送操作类似于一个赋值语句,可以直接将数据发送到channel,如果没有协程在接收这个channel,发送操作会一直阻塞等待,直到有其他协程来接收。

- 接收操作类似于一个取值操作,如果channel中没有数据,接收操作会一直阻塞等待,直到channel中有数据可以接收。

4. 关闭channel:
可以通过close函数来关闭channel,关闭后的channel不能再发送数据,但还可以继续接收数据。

关闭channel之后,再次接收会返回对应类型的零值。

`close(ch)`
5. 判断channel是否关闭:
使用两个值的接收形式可以利用通道的关闭来判断是否关闭。

- `x, ok := <-ch`,ok为true表示从channel接收到值,ok为false表示通道已经关闭。

6. 遍历channel:
可以使用`for range`来遍历channel,当channel被关闭且无数据可接收时,循环会自动结束。

7. 单向channel:
可以创建单向的发送或接收channel:
- 只能发送数据的channel:`ch := make(chan<- int)`,只能向channel发送值。

- 只能接收数据的channel:`ch := make(<-chan int)`,只能从channel中接收值。

8. 通道容量:
通道可以有一个可选的容量,容量的大小决定了通道可以缓
存的值的数量。

未指定容量时,通道默认容量为0,即没有缓
冲区;指定容量为正数时,通道为有缓冲区的通道,可以先将值放入缓冲区,直到缓冲区满了才会阻塞发送操作。

总之,channel是Go语言一种非常有用的并发原语,可以很方便地实现协程之间的通信和同步。

相关文档
最新文档