Go允许人们将定义的方法与其所处理的struct / datatype分开。这是否意味着只是灵活地放置方法定义或其他内容?我听说过Go的struct / methods系统已与猴子补丁进行了比较,但是如果我理解正确,那么您真的不能将方法添加到任何现有类型(struct)中,因为方法必须与该类型位于同一包中。IE。无论如何,您只能猴子修补受您控制的类型。还是我错过了什么?在哪种情况下,您将在单独的源文件中(或在同一源文件的不同部分中)定义类型及其方法?
3 回答
holdtom
TA贡献1805条经验 获得超10个赞
这是基于类型的语言的优势:您可以根据需要组织文件:
您可以将所有类似的功能放在一起,即使接收器类型很多
您可以分割一个文件,否则文件可能太大
通常,Go不会添加没有用的约束。因此答案也可能是“为什么不”?
您真的不能将方法添加到任何现有类型(结构)中,因为方法必须与该类型位于同一包中
如果可以,在两个不同包中的相同结构上使用相同函数名称的情况下,您可能无法确定要调用哪个函数。否则会使某些软件包不兼容。
浮云间
TA贡献1829条经验 获得超4个赞
这是(部分可能是因为)在Go中,您可以拥有任何类型的方法,而不仅仅是struct:
type Age uint
func (a Age) Add(n Age) Age {
return a + n
}
这也是您可以将方法添加到现有类型的方法。您要做的是基于现有类型定义一个新类型,然后根据需要添加方法。
慕运维8079593
TA贡献1876条经验 获得超5个赞
猴子补丁是不可能的。您定义方法所依据的类型必须位于同一包中。
您可以做的是在包中的任意位置定义函数和方法。类型定义是否与类型的方法定义在同一个文件中并不重要。
这样就可以将所有类型定义分组在一个文件中,并在另一文件中使用方法实现。该方法可能需要与其他帮助程序一起使用。
- 3 回答
- 0 关注
- 192 浏览
添加回答
举报
0/150
提交
取消