原创

go的单向通道

温馨提示:
本文最后更新于 2022年01月22日,已超过 814 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

我们可以通过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)
}
正文到此结束
本文目录