为什么go方法的接收者应该保持一致?

I've been reading the FAQ re using pointer or value method receivers and it says:

Next is consistency. If some of the methods of the type must have pointer receivers, the rest should too, so the method set is consistent regardless of how the type is used.

Why is this important? Surely if I have some methods that are purely for reading data I want to use value receivers so as not to risk making destructive changes to the receiver. This advice suggests that if I then create a single method that should modify data on the receiver I should change all my methods to use pointer receivers.

Can someone explain the reasoning behind this advice? What's wrong with using the right tool for the job?

The key point in this quote is method set consistency. Types T and *T are different types in Go and may have different method sets (explanation is also in the FAQ).

One of the reasons it's important, is because interface satisfaction is implicit in Go. So if some of your type's methods have a pointer receiver, while others don't, this can result in a situation, when you expect that your object satisfies some interface, but now that depends on whether you are using it's pointer or value.

So it's good practice to avoid this kind of confusion.