带指针的 Go 工厂方法多态性

Vit*_*fal 1 polymorphism go

type Foo interface {
    FooMethod()
}
type BarFoo struct {
}
func (f *BarFoo) FooMethod() {
}
func NewBarFoo() *Foo {
    return &BarFoo{}
}
Run Code Online (Sandbox Code Playgroud)

错误:无法使用“&BarFoo{}”(类型 *BarFoo)作为类型 *Foo

为什么我会收到此类代码的编译错误?多态性对指针有用吗?

顺便说一句,这段代码很好

func NewBarFoo() Foo {
    return &BarFoo{}
}
Run Code Online (Sandbox Code Playgroud)

dav*_*ave 5

您只需将函数签名更改为

func NewBarFoo() Foo {
    return &BarFoo{}
}
Run Code Online (Sandbox Code Playgroud)

你仍然返回一个指针,恰好该指针实现了接口