我们可以通过channel做为协程通信,但是为了避免多协程中操作通道时污染变量,我们可以通过单向通道进行限制
函数参数声明:
(out chan<- int) 参数只允许接收数据,不允许发送数据 (in <-chan int) 参数只允许发送数据,不允许接收 ``````as3 package main import ( "fmt" ) func main() { chan1 := make(chan int) chan2 := make(chan int) go sendChan(chan1) //函数sendChan只允许发送数据 go squarer(chan2, chan1) //函数squarer将chan1的数据转给chan2 go recvChan(chan2) //函数recvChan只允许接收数据 select {} } func sendChan(in chan<- int) { i := 0 for { in <- i i++ } } func recvChan(out <-chan int) { for i := range out { fmt.Println("out输出:", i) } } func squarer(out chan<- int, in <-chan int) { for i := range in { out <- i } close(out) }