golang的channel探索
在Golang中,channel是一种内置的数据结构,可以用于两个go程(goroutine)之间的同步和通信。
以下是一些使用Golang channel的方法:
- 创建一个channel:
c := make(chan int)
这将创建一个用于传输整数的channel。
- 发送和接收数据:
// 发送数据
c <- 1
// 接收数据
x := <- c
- 使用
range
关键字来迭代接收从channel发送的数据,这个操作会一直阻塞,直到channel被关闭:
for i := range c {
fmt.Println(i)
}
- 使用
close
关键字关闭channel,一旦关闭,就不能再向其发送数据,但仍然可以接收数据直到channel为空:
close(c)
- 使用
select
语句来处理多个channel,这个语句会阻塞,直到有一个操作可以进行:
select {
case <-c1:
// 如果c1可以接收数据,则执行这里的代码
case c2 <- 1:
// 如果c2可以发送数据,则执行这里的代码
default:
// 如果都不能执行,则执行这里的代码
}
- 使用带有
buffer
的channel,也就是有capacity
的channel,可以缓存一定数量的数据,不会立即阻塞:
c := make(chan int, 3) // 创建一个缓冲区容量为3的channel
以上就是Golang channel的一些基本用法。
评论已关闭