继承是Go中嵌入式结构的特例吗?

Pie*_*tti 1 inheritance struct go

在Go中,type Txt string只是一个快捷方式type Txt struct {string}

Vol*_*ker 7

你所有问题的答案都是响亮的"不!".

  1. string将a 嵌入到struct中基本上是一个无用的嵌入示例,因为string没有可以升级到嵌入类型的方法.

  2. 该构造type Txt string定义了一个名为Txt的新类型,底层类型是一个字符串.Txt有不同的方法设置,因为它是一个不同的类型.但是作为它的基础类型,string你可以自由地键入它们.

  3. type T string不是快捷方式type S struct { string },例如你不能做 t := T{"foo"},只有t := T("foo")工作,而S它是另一种方式.

  4. 嵌入与继承完全没有关系.这是两件不同的事情.使用嵌入来模仿继承注定会失败,因为你无法在Go中继承.(这是一般性建议,它是一个非常有用的建议;但是一些特定的继承问题可能是嵌入式的.只要忘记继承,你就会更快乐.)

  5. 如果两种类型具有共同的数据和方法,嵌入是有用的,在这种情况下,嵌入提供了一些很好的语法糖:而不是type T struct { c common; r rest }; t := T{...}; t.common.method()你可以做type T struct { common; r rest }; t := T{...}; t.method()哪些节省输入,但基本上是相同的代码.包测试包含很好的例子.