func (t T) foo() { fmt.Printf("foo: received type %T, ", t) } func (t *T) bar() { fmt.Printf("bar: received type %T, ", t) } func main() { t := T{} pt := &t pt.foo() fmt.Printf("passed type %T\n", pt) t.foo() fmt.Printf("passed type %T\n", t) pt.bar() fmt.Printf("passed type %T\n", pt) t.bar() fmt.Printf("passed type %T\n", t) } Run 4