一尘不染

将通道嵌入结构

go

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

为什么映射语法之间不一致:

var m map[string]int

和渠道,

var m chan int

为了明确起见,在Go中可以将一个类型嵌入另一个类型。嵌入类型可以访问在嵌入类型上定义的所有方法,但是也可以通过其类型名称显式引用嵌入类型。因此,映射类型声明和通道类型声明之间的不一致会使想要引用嵌入式通道类型的人感到困惑。


阅读 201

收藏
2020-07-02

共1个答案

一尘不染

问题在于, 嵌入
主要使您可以从嵌入类型的方法中受益(如“ 在Go中嵌入而不是继承
”中所述)

channel一样map,是
未命名的类型 (使用类型文字指定,该类型文字会从现有类型组成新的类型。)。
它没有自己的方法,也没有导出的字段,因此将channel类型嵌入到中不会很费劲struct {}

您可能会收到与本示例中的错误消息类似的错误消息:

func (x chan int) m2() {}
invalid receiver type chan int (chan int is an unnamed type)

如果将channel类型嵌入有效的类型中struct,则该未命名的类型将能够充当method接收者,这似乎并不是该语言最初所允许的。

2020-07-02