如何在Go中的结构中嵌入通道?
为什么地图语法之间的不一致:
var m map[string]int
Run Code Online (Sandbox Code Playgroud)
和渠道,
var m chan int
Run Code Online (Sandbox Code Playgroud)
?
为了澄清,在Go中可以嵌入另一种类型的类型.在嵌入型收益访问的嵌入式类型定义的所有方法,但它也可以由它的类型的名称来指代嵌入式明确.因此,对于想要引用嵌入式通道类型的人来说,地图类型声明和通道类型声明之间的不一致会让人感到困惑.
Von*_*onC 10
问题是嵌入允许您主要从嵌入类型的方法中受益(如" 在Go中嵌入而不是继承 "中所述)
并且channel,就像map是一个未命名的类型(使用类型文字指定,它从现有类型组成一个新类型.).
它没有自己的方法或导出的字段,所以你不会在一个channel类型中嵌入一个类型struct {}.
您可能会有一个类似于此示例中的错误消息:
func (x chan int) m2() {}
invalid receiver type chan int (chan int is an unnamed type)
Run Code Online (Sandbox Code Playgroud)
如果channel在一个struct工作类型中嵌入一个类型,那个未命名的类型将能够充当方法的接收者,这首先似乎不被语言所允许.