积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《继承语法。有什么不同?》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
问题内容在 go 中,下面的区别是什么?
我尝试搜索,但找不到合适的术语来描述它们。他们的正式名称是怎样的?
#1 - 结构内部的父级:
type mytime struct {
time.time
}
#2 - 在我的类型之后没有结构定义的父级:
type MyTime time.Time
对于#2,我可以用另一个时间来初始化我的类型。像 mt := mytime(t)
这样的时间。
如何用另一个 time.time 变量初始化 #1 类型?
解决方案
go 不是面向对象的语言,没有类型层次结构和继承。详情请参见What is the idiomatic way in Go to create a complex hierarchy of structs?和Go embedded struct call child method instead parent method。
您的第一个示例创建一个新类型 mytime
embedding time.time
。通过嵌入类型,嵌入类型的所有字段和方法都会提升,并且可以像嵌入器类型的字段或方法一样使用,例如,当您想要实现接口时非常方便(因为提升的方法将“存在”而无需声明它们)。
您可以像这样实例化它(有关详细信息,请参阅Golang embedded struct type):
t := mytime{time: time.now()}
您的第二个示例创建一个新类型,所有方法都将从其中剥离。当您不希望现有方法成为新类型的一部分时,这会很方便。一个典型的例子是定义 string()
方法或在您想要在实现中调用原始行为时覆盖编组行为,有关详细信息,请参阅 Call json.Unmarshal inside UnmarshalJSON function without causing stack overflow。您可以使用简单的类型转换创建它的值: p>
t := MyTime(time.Now())
本篇关于《继承语法。有什么不同?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注编程网公众号!