为了账号安全,请及时绑定邮箱和手机立即绑定

从结构定义中定义Go方法有什么好处?

从结构定义中定义Go方法有什么好处?

Go
ABOUTYOU 2021-05-14 16:09:36
Go允许人们将定义的方法与其所处理的struct / datatype分开。这是否意味着只是灵活地放置方法定义或其他内容?我听说过Go的struct / methods系统已与猴子补丁进行了比较,但是如果我理解正确,那么您真的不能将方法添加到任何现有类型(struct)中,因为方法必须与该类型位于同一包中。IE。无论如何,您只能猴子修补受您控制的类型。还是我错过了什么?在哪种情况下,您将在单独的源文件中(或在同一源文件的不同部分中)定义类型及其方法?
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

这是基于类型的语言的优势:您可以根据需要组织文件:

  • 您可以将所有类似的功能放在一起,即使接收器类型很多

  • 您可以分割一个文件,否则文件可能太大

通常,Go不会添加没有用的约束。因此答案也可能是“为什么不”

您真的不能将方法添加到任何现有类型(结构)中,因为方法必须与该类型位于同一包中

如果可以,在两个不同包中的相同结构上使用相同函数名称的情况下,您可能无法确定要调用哪个函数。否则会使某些软件包不兼容。


查看完整回答
反对 回复 2021-05-17
?
浮云间

TA贡献1829条经验 获得超4个赞

这是(部分可能是因为)在Go中,您可以拥有任何类型的方法,而不仅仅是struct:


type Age uint


func (a Age) Add(n Age) Age {

  return a + n

}

这也是您可以将方法添加到现有类型的方法。您要做的是基于现有类型定义一个新类型,然后根据需要添加方法。




查看完整回答
反对 回复 2021-05-17
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

猴子补丁是不可能的。您定义方法所依据的类型必须位于同一包中。

您可以做的是在包中的任意位置定义函数和方法。类型定义是否与类型的方法定义在同一个文件中并不重要。

这样就可以将所有类型定义分组在一个文件中,并在另一文件中使用方法实现。该方法可能需要与其他帮助程序一起使用。


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信