通道 (Channel) 是一种用于在 goroutine 之间进行通信和同步的机制. 通过通道, 不同的 goroutine 可以安全地发送和接收数据.
以下是关于通道的一些基本信息和用法:
- 创建通道:
通过使用内置的 make 函数可以创建一个通道. 通道的类型由通道中传递的值的类型决定. 例如, 要创建一个传递整数的通道, 可以使用 make 函数如下:
ch := make(chan int)
- 发送和接收数据:
使用通道的 <- 运算符可以发送和接收数据. 发送操作将数据发送到通道, 接收操作从通道中接收数据. 例如:
ch <- 42 // 发送数据到通道
value := <-ch // 从通道接收数据, 并将其赋值给变量 value
- 通道的阻塞:
当向一个通道发送数据时, 如果通道已满, 发送操作将会阻塞, 直到有空间可以发送数据. 类似地, 当从一个通道接收数据时, 如果通道为空, 接收操作将会阻塞, 直到有数据可供接收.
- 关闭通道:
使用内置的 close 函数可以关闭一个通道. 关闭通道后, 无法再向通道发送数据, 会包异常. 但仍然可以从通道接收数据, 数据读完也不会阻塞, 并返回 false.
close(ch) // 关闭通道
- 通道的遍历:
使用 range 关键字可以遍历通道中的值. 当通道被关闭且没有更多的数据可供接收时, range 循环会自动退出.