报错
> cannot use Foo{} (value of type Foo) as Fooer value in variable declaration: Foo does not implement Fooer (method Foo has pointer receiver)compiler[InvalidIfaceAssign](https://pkg.go.dev/golang.org/x/tools/internal/typesinternal#InvalidIfaceAssign)
Fooer没有什么receiver的类型,但是在创建实例时,会根据右值类型检查receiver。如果是对象,会检查 `func (p Foo) Foo()`有没有。
由于指针reciver可能修改内容,有副作用,而interface具体指向的实例又不确定。如果两个struct实现了不同receiver接口,可能会对调用者产生疑惑,所以要求更严格了
func (f *Foo) Foo() { fmt.Println("ptr foo") }
/ func (f Foo) Foo() { fmt.Println("value foo") } /
func (f Foo) VFoo() { fmt.Println("value foo") }
编译器知道对象foo的类型
var _ Fooer = Foo{}