Methods and pointer indirection
Here’s something useful: pointer receiver methods are more flexible than pointer-argument functions.
A plain function with a pointer argument requires a pointer — no exceptions:
var v Vertex
ScaleFunc(v, 5) // Compile error!
ScaleFunc(&v, 5) // OK
But a method with a pointer receiver accepts both a value and a pointer:
var v Vertex
v.Scale(5) // OK
p := &v
p.Scale(10) // OK
Go handles the conversion automatically. v.Scale(5) becomes (&v).Scale(5) behind the scenes. It’s a convenience — you don’t have to think about it.