channel 方向
单向 channel
概念
- 单向 channel: 在函数签名中表达通信方向;
chan<- T: 只允许向 channel 发送T;<-chan T: 只允许从 channel 接收T;- 使用场景: 限制函数能力,提升接口清晰度;
发送方向
func send(ch chan<- int) {
ch <- 1 // chan<- int 只能发送
}
接收方向
func recv(ch <-chan int) int {
return <-ch // <-chan int 只能接收
}
方向对比
| 类型 | 允许发送 | 允许接收 |
|---|---|---|
chan T | 是 | 是 |
chan<- T | 是 | 否 |
<-chan T | 否 | 是 |