总结一下:

  1. 首先 渠道是引用传递的, 这个函数里关于参数渠道的修改, 都直接回修改原来的值
  2. 双向渠道 是可以赋值给单向渠道的, 自动转换的, 举个例子

a := make(chan int, 3)
a <- 1 // 塞了一个数据

//往渠道里塞2,3 两个数字
func test2(b chan<- int) {

b <- 2
b <- 3
close(b)

}

fmt.Println(a)
得到的结果是1,2,3