The short explanation is that the compiler automatically converts
(&a).World(). Per the spec a bit further down in
A method call
x.m() is valid if the method set of (the type of)
m and the argument list can be assigned to the parameter list of
x is addressable and
&x's method set contains
x.m() is shorthand for
Here’s an issue on StackOverflow with an excellent point about the subtle differences between the two and why you might choose one over the other:
A method which has a pointer as the receiver has the ability to modify the values of that receiver, while a method which has a value as the receiver cannot.
There’s a lot of great information in that issue. I would also use care when dealing with things that use reflection, such as MarhsalJSON. In that case it does matter which receiver you use.