我很难理解go开发人员为什么会选择像func (t Type) MethodName()这样的方法语法。我无法理解这个事实,特别是在读这个之后,并且考虑到go是极简的事实。如果使用隐式参数(如func Type.MethodName()或self )访问对象,那么像this或self这样简单的语法就不够了。还是我遗漏了当前语法所提供的任何优点?
发布于 2014-07-20 05:15:33
该特定语法的目标对于Go语言非常特殊,并且很难映射到其他语言语法:
此语法允许您定义方法集。
类型可能具有与其相关联的方法集。接口类型的方法集是它的接口。
T.的方法集都由用接收机类型 T声明的all 方法 组成。*T的方法集是用接收方*T或T声明的所有方法集(也就是说,它还包含T的方法集)。其他规则适用于包含匿名字段的结构,如结构类型一节所述。任何其他类型都有一个空方法集。在方法集中,每个方法必须有唯一的非空白方法名.
类型的方法集确定类型 实施器 的接口以及可以使用该类型的接收器的 被称为 的方法。
与其说它是一个“优势”,不如说它是一个Go特性,它允许使用新方法轻松地扩展类型。
例如,参见"Go接口的一些例子是什么?“。
明确的接收方声明允许您做两件事情:
self”或“this”(例如,您可能有一个func (srv *Server)...)。
上下文特定的名称是在围棋中被认为是好风格。--一个方法的接收者的名称应该是它的身份的反映;通常,它类型的一个或两个字母的缩写足以(例如"
c“或"cl”表示"Client")。 不要使用通用名称,如"me“、"this”或"self",它们是面向对象语言的典型标识符,它们更强调方法而不是函数。 这个名称不需要像方法论证那样描述性,因为它的作用是显而易见的,没有任何文献目的。它可以非常短,因为它将出现在几乎每一行的每一种方法的类型;熟悉承认简洁。 也要保持一致:如果在一种方法中调用接收方"c“,则不要在另一种方法中称其为"cl”。
https://stackoverflow.com/questions/24847582
复制相似问题