继承语法.有什么区别呢?



在Go中有什么不同?

我试着搜索,但我想不出一个合适的术语来描述它们。它们的正式叫法是什么?

#1 -

type MyTime struct {
time.Time
}

#2 -在没有struct定义的情况下,我的类型后面是父类型:

type MyTime time.Time

对于#2,我可以用另一个时间初始化类型。时间像mt := MyTime(t)。如何用另一个时间初始化#1类型。时间变量?

Go不是面向对象的语言,没有类型层次和继承。有关详细信息,请参见在Go中创建复杂结构层次结构的惯用方法是什么?和Go嵌入结构调用子方法而不是父方法。

你的第一个例子创建了一个新的类型MyTime嵌入time.Time。通过嵌入类型,嵌入类型的所有字段和方法都得到提升,并且可以像嵌入类型的字段或方法一样使用,这在您想要实现接口时非常方便(因为提升的方法将"存在")。而不必声明它们)。

您可以实例化它(有关详细信息,请参阅Golang嵌入的结构类型):

t := MyTime{Time: time.Now()}
第二个例子创建了一个新的类型时,所有方法都将从中剥离。当您不希望现有方法成为新类型的一部分时,这很方便。这方面的一个突出例子是,当您希望调用实现中的原始行为时,定义String()方法或重写封送行为,详细信息请参阅call json。在UnmarshalJSON函数内部解封,而不会导致堆栈溢出。您可以使用简单的类型转换来创建它的值:
t := MyTime(time.Now())

最新更新