Search code examples
gomethodsidentifier

What is purpose of methods with blank names?


I have just started studying golang and during reading specification I found some question that I can't resolve by myself. In the section about method declaration the language specification says "If the base type is a struct type, the non-blank method and field names must be distinct."

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

As I understood, method with blank name is

func (t T) _() {
  // some cool code
}

So, how can I use it and what is main purpose of such methods?


Solution

  • There is no real purpose of having blank method names, and you can't call them in any way (not even via reflection, they won't appear among the (exported) methods of the type, see on the Go Playground). It's just not explicitly forbidden by the language spec.

    The method name is:

    MethodName     = identifier .
    

    A method name can be anything that is a valid 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" */ .
    

    The phrase "the non-blank method and field names must be distinct" just means the method (and field) names must be distinct, but you may add 2 separate blank methods, they don't collide. Blank methods don't have a name that would collide with anything, including other blank methods.