例如,我希望创建一个只能从其中提取接收通道的通道:
c := make(chan <-chan int)然而,我无法从这个频道读到:
invalid operation: <-c (receive from send-only type chan<- chan int)(操场链接)从错误消息中可以清楚地看到,我的语法chan <-chan被解释为chan<- chan,即一个只发送通道的通道。运行gofmt甚至会更改代码以反映这一点。
那么,如何表示我想要的频道类型呢?
发布于 2019-02-20 16:26:09
如果对Go的语法有什么不清楚的地方,应该首先检查语言规范。与其他语言相比,Go的规范更易读、更短。
这正是在规格:频道类型:中提到的
<-运算符与最左边的chan可能关联: chan <- chan int /同为chan<- (chan int) chan<- <-chan int /同为chan <- chan int /同为<-chan int (<-chan int) chan (<-chan int)
答案是,在这几行引文中,答案是清晰而简单的。
<-操作符与最左边的chan可能相关联。chan<- chan int与chan<- (chan int)相同chan (<-chan int)发布于 2019-02-20 13:34:09
答案很简单:添加括号。
c := make(chan (<-chan int))在某些情况下,另一种更易读的方法是为内部通道创建一个新类型:
type ReceiveOnlyIntChan <-chan int
c := make(chan ReceiveOnlyIntChan)https://stackoverflow.com/questions/54787581
复制相似问题