我刚刚开始研究golang,在阅读规范期间,我发现了一些我自己无法解决的问题。在关于方法声明的部分中,语言规范说“如果基类型是结构类型,则非空方法和字段名称必须是不同的”。
https://golang.org/ref/spec#Method_declarations
据我所知,空白名称的方法是
func (t T) _() {
// some cool code
}
那么,我该如何使用它以及这些方法的主要目的是什么?
没有真正意图有空白的方法名称,你不能以任何方式调用它们(甚至不通过反射,它们不会出现在该类型的(导出)方法中,请参阅Go Playground)。它并没有被语言规范明确禁止。
方法名称是:
MethodName = identifier .
方法名称可以是任何有效的identifier:
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" */ .
短语“非空方法和字段名称必须是不同的”只是意味着方法(和字段)名称必须是不同的,但是您可以添加2个单独的空白方法,它们不会发生冲突。空白方法没有与任何内容发生冲突的名称,包括其他空白方法。