文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

继承语法。有什么不同?

2024-04-05 00:11

关注

积累知识,胜过积蓄金银!毕竟在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。您可以使用简单的类型转换创建它的值:

t := MyTime(time.Now())

本篇关于《继承语法。有什么不同?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注编程网公众号!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯