Golang: chan定义问题

Posted lijianming180

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang: chan定义问题相关的知识,希望对你有一定的参考价值。

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

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

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

案例

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

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

import "fmt"

func () {

xChan := make(chan int)

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

要声明一个单向的 chan 可以使用这一的方式:大专栏  Golang: chan定义问题(7)p>

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 的定义问题

以上是关于Golang: chan定义问题的主要内容,如果未能解决你的问题,请参考以下文章

Golang:我可以转换为 chan 接口

golang golang_chan_select_timeout.go

golang chan 超时

golang close_chan

在Golang中实现有无限容量的同步Queue

java实现golang类似的chan