Learning Go: Implicit Addressing and Deference in Method

An interesting sample Go program was discussed in Google group:

package main
import "fmt"
type Foo struct {
    X float64
func (v *Foo) Neg() float64 {
    return -v.X
func main() {
    var v0 Foo = Foo{3}
    var v1 *Foo = & v0
    var v2 **Foo = & v1
    var v3 ***Foo = & v2
        v0.Neg(), //OK, due to Rule 2.
        v1.Neg(), //OK, the normal case.
        v2.Neg(), //OK, due to Rule 3.
        v3.Neg()) //v3.Neg undefined (type ***Foo has no field or method Neg)

From this program ,we can see three rules about addressing and deference in method calls:

There would be no way to call a method using a reciever type like ***Foo, because we cannot attach a method to a pointer type as stated in Rule 1; so the furthest implicit dereference reaches reciever type **Foo.