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

Go允许人们将定义的方法与其所处理的struct / datatype分开。这是否意味着只是灵活地放置方法定义或其他内容?

我听说过Go的struct / methods系统已与猴子补丁进行了比较,但是如果我理解正确,那么您真的不能将方法添加到任何现有类型(struct)中,因为方法必须与该类型位于同一包中。IE。无论如何,您只能猴子修补受您控制的类型。还是我错过了什么?

在哪种情况下,您将在单独的源文件中(或在同一源文件的不同部分中)定义类型及其方法?


ABOUTYOU
浏览 196回答 3
3回答

holdtom

这是基于类型的语言的优势:您可以根据需要组织文件:您可以将所有类似的功能放在一起,即使接收器类型很多您可以分割一个文件,否则文件可能太大通常,Go不会添加没有用的约束。因此答案也可能是“为什么不”?您真的不能将方法添加到任何现有类型(结构)中,因为方法必须与该类型位于同一包中如果可以,在两个不同包中的相同结构上使用相同函数名称的情况下,您可能无法确定要调用哪个函数。否则会使某些软件包不兼容。

浮云间

这是(部分可能是因为)在Go中,您可以拥有任何类型的方法,而不仅仅是struct:type Age uintfunc (a Age) Add(n Age) Age {  return a + n}这也是您可以将方法添加到现有类型的方法。您要做的是基于现有类型定义一个新类型,然后根据需要添加方法。

慕运维8079593

猴子补丁是不可能的。您定义方法所依据的类型必须位于同一包中。您可以做的是在包中的任意位置定义函数和方法。类型定义是否与类型的方法定义在同一个文件中并不重要。这样就可以将所有类型定义分组在一个文件中,并在另一文件中使用方法实现。该方法可能需要与其他帮助程序一起使用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go