Go Methods
External
Internal
Overview
Go allows associating arbitrary behavior with built-in or custom types, which contributes to the object-oriented character of the language. Note that Go is not a fully object-oriented language, it misses type inheritance, for example.
Syntactically, the association of the behavior with the type is done by declaring a function, encapsulating the behavior we want to add to the type, and adding a receiver type to its signature:
func (t ReceiverType) FunctionName(parameters, ...) (return_declaration) { ... }
As result of this association, the function becomes a method of the type.
The declaration is identical to that of a regular function, with the exception of the receiver parameter, which precedes the function name. The receiver parameter gives the method's body access to the instance of the associated type. Aside from its special syntactical position, all other aspects the receiver parameter is identical with the regular parameters of the function.
An aspect that has profound implications on the relationship between the method and the type instance is whether the receiver parameter is a value or a pointer. Use pointer receivers if you intend to let the method modify the state of the receiver instance. See Value or Pointer Receiver.
Value or Pointer Receiver
Use a pointer receiver if you intend to use the method to modify the state of the receiver instance.
Use a value receiver if the method must not be able to change the state of the receiver instance. Since the receiver argument is passed by value, the original receiver is protected from changes.
TODO
Continue and deplete Go_Language_Object_Oriented_Programming#Methods