在struct中嵌入通道

时间:2014-10-04 15:11:04

标签: go

如何在Go中的结构中嵌入频道?

为什么地图语法之间的不一致:

var m map[string]int

和频道,

var m chan int

为了澄清,在Go中可以嵌入另一种类型的类型。嵌入器类型可以访问嵌入类型上定义的所有方法,但也可以通过其类型名称显式引用嵌入类型。因此,对于想要引用嵌入式通道类型的人来说,地图类型声明和通道类型声明之间的不一致会让人感到困惑。

1 个答案:

答案 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,这似乎不会被语言所允许第一名。