我们首先看两个例子:
package main
import "fmt"
func main() {
ch := make(chan int, 10)
writeChan(ch)
readChan(ch)
}
//单向只写管道,只能写数据到管道里面
func writeChan(ch chan<- int) {
ch <- 1
}
//单向只读管道,只能从管道里面读出数据
func readChan(ch <-chan int) {
value := <-ch
fmt.Println(value)
}
上面的例子,writeChan只能对ch变量进行写操作,readChan只能对ch变量进行读操作,这样造成很多同学对管道理解就有了只读和只写管道了,其实管道都是双向的,默认双向可读写,只是管道在函数参数传递时可以使用操作符限制管道的读写,就如上面的例子。
关于上面单向管道的例子,单向管道只能用于发送或者接受数据,但是go的管道其实是没有单向管道,所谓的单向管道只是对管道的一种使用限制,这个和c语言const修饰函数参数为只读是一个道理。
总结: