名称为空的方法的目的是什么?

Ily*_*yev 3 methods identifier go

我刚刚开始学习golang,在阅读规范时发现了一个我自己无法解决的问题。在有关方法声明的部分中,语言规范说:“如果基本类型是结构类型,则非空白方法和字段名称必须不同。”

https://golang.org/ref/spec#Method_declarations

据我了解,带有空白名称的方法是

func (t T) _() {
  // some cool code
}
Run Code Online (Sandbox Code Playgroud)

那么,我该如何使用它?这些方法的主要目的是什么?

icz*_*cza 8

拥有空白方法名称并没有真正的目的,并且您不能以任何方式调用它们(即使通过反射也不可以,它们不会出现在该类型的(导出的)方法中,请参见Go Playground上的内容)。语言规范没有明确禁止它。

方法名称为:

MethodName     = identifier .
Run Code Online (Sandbox Code Playgroud)

方法名称可以是任何有效标识符

identifier     = letter { letter | unicode_digit } .
letter         = unicode_letter | "_" .
unicode_letter = /* a Unicode code point classified as "Letter" */ .
unicode_digit  = /* a Unicode code point classified as "Number, decimal digit" */ .
Run Code Online (Sandbox Code Playgroud)

短语“非空白方法和字段名称必须是不同的”只是表示方法(和字段)名称必须是不同的,但是您可以添加2个单独的空白方法,它们不会冲突。空方法的名称不会与任何东西冲突,包括其他空方法。