登录
首页 >  Golang >  Go问答

继承语法。有什么不同?

来源:stackoverflow

时间:2024-04-02 17:18:35 458浏览 收藏

积累知识,胜过积蓄金银!毕竟在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的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>