首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么go语言对方法有一个奇怪的语法?

为什么go语言对方法有一个奇怪的语法?
EN

Stack Overflow用户
提问于 2014-07-20 05:08:54
回答 1查看 971关注 0票数 1

我很难理解go开发人员为什么会选择像func (t Type) MethodName()这样的方法语法。我无法理解这个事实,特别是在读这个之后,并且考虑到go是极简的事实。如果使用隐式参数(如func Type.MethodName()self )访问对象,那么像thisself这样简单的语法就不够了。还是我遗漏了当前语法所提供的任何优点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-20 05:15:33

该特定语法的目标对于Go语言非常特殊,并且很难映射到其他语言语法:

此语法允许您定义方法集

类型可能具有与其相关联的方法集。接口类型的方法集是它的接口。

  • 任何其他类型的T.的方法集都由用接收机类型 T声明的all 方法 组成。
  • 对应指针类型*T的方法集是用接收方*TT声明的所有方法集(也就是说,它还包含T的方法集)。

其他规则适用于包含匿名字段的结构,如结构类型一节所述。任何其他类型都有一个空方法集。在方法集中,每个方法必须有唯一的非空白方法名.

类型的方法集确定类型 实施器 的接口以及可以使用该类型的接收器的 被称为 的方法。

与其说它是一个“优势”,不如说它是一个Go特性,它允许使用新方法轻松地扩展类型。

例如,参见"Go接口的一些例子是什么?“。

二-二添加在评论中

明确的接收方声明允许您做两件事情:

  1. 决定某些方法将得到指针接收器,而其他方法(例如,小结构上的非变异方法)不会,以及
  2. 选择特定于上下文的名称,而不是“self”或“this”(例如,您可能有一个func (srv *Server)...)。 上下文特定的名称是在围棋中被认为是好风格

请参阅Wiki CodeReviewComments

--一个方法的接收者的名称应该是它的身份的反映;通常,它类型的一个或两个字母的缩写足以(例如"c“或"cl”表示"Client")。 不要使用通用名称,如"me“、"this”或"self",它们是面向对象语言的典型标识符,它们更强调方法而不是函数。 这个名称不需要像方法论证那样描述性,因为它的作用是显而易见的,没有任何文献目的。它可以非常短,因为它将出现在几乎每一行的每一种方法的类型;熟悉承认简洁。 也要保持一致:如果在一种方法中调用接收方"c“,则不要在另一种方法中称其为"cl”。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24847582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档