如何在Go中的结构中嵌入频道?
为什么地图语法之间的不一致:
var m map[string]int
和频道,
var m chan int
为了澄清,在Go中可以嵌入另一种类型的类型。嵌入器类型可以访问嵌入类型上定义的所有方法,但也可以通过其类型名称显式引用嵌入类型。因此,对于想要引用嵌入式通道类型的人来说,地图类型声明和通道类型声明之间的不一致会让人感到困惑。
答案 0 :(得分:10)
问题是 embedding 允许您主要从嵌入式类型的方法中受益(如“Embedding instead of inheritance in Go”中所述)
与channel
一样,map
是 unnamed type (使用类型文字指定,它从现有类型中组合新类型。)。<登记/>
它没有自己的方法或导出的字段,因此您不会在channel
中嵌入struct {}
类型。
您可能会收到类似于此example中的错误消息:
func (x chan int) m2() {}
invalid receiver type chan int (chan int is an unnamed type)
如果在channel
类型中嵌入struct
类型,则该未命名类型将能够充当receiver for methods,这似乎不会被语言所允许第一名。