Source: Should methods be declared on T or *T
Digest:
In short, I think that you should prefer declaring methods on *T unless you have a strong reason to do otherwise.
1. We say T but that is just a place holder for a type that you declare.
2. This rule is recursive, taking the address of a variable of type *T returns a result of type **T.
3. This is why nobody can declare methods on primitive types like int.
4. Methods in Go are just syntactic sugar for a function which passes the receiver as the first formal parameter.
5. If the method does not mutates its receiver, does it need to be a method.