Golang: chan定义问题(7)

通常都是定义读写双向的 chan,定义单向 chan 问题。

专栏的介绍可以参考 《GotchaGolang专栏》,代码可以看《宝库-Gotcha》

通过 只写 chan 传递另一个只读的 chan,怎么写

案例

平常一般是这么声明 chan 的:

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {
//var xChan chan int //双向 chan,可以读写 int 类型变量(只声明还不够,要定义)
xChan := make(chan int)

fmt.Println(len(xChan)); //0
}

要声明一个单向的 chan 可以使用这一的方式:

1
2
chan<- float64  // 只写 float64 类型变量 (write-only)
<-chan int // 只读 int 类型变量 (read-only)

传递 chan 变量怎么办?

1
2
3
chan<- chan int    //传递双向 chan, 同 chan<- (chan int)
chan<- <-chan int //传递只读 给只写chan, 同 chan<- (<-chan int)
<-chan <-chan int //传递只读chan 给只读chan 同 <-chan (<-chan int)

总结

定义只读,只写的类型,看上去比较诡异,可以把 <-chanchan<- 看做类型即可,同 chan 一样。


Merlin 2018.3 chan 的定义问题

文章目录
  1. 1. 案例
  2. 2. 总结
|