Go 中的工厂模式

Factory pattern in Go

我正在尝试使用 Go 实现工厂模式,这里是示例 https://play.golang.org/p/ASU0UiJ0ch

我有一个接口 Pet 和一个结构 Dog 所以 Dog 应该有属性Pet,在这种情况下只有一个是物种,当试图通过工厂 NewPet[ 初始化对象 Dog 时=21=],有人可以指教一下吗。

你的 NewPet 工厂 return 在类型断言中输入 Pet,而不是 *Pet。 (您很少需要指向接口的指针)

return Pets[pet].(func(string) Pet)(name)

您的 Pet 构造函数还需要 return 键入 Pet 以满足工厂函数签名,您可以将其简化为:

func NewDog(name string) Pet {
    return &Dog{
        name: name,
    }
}

现在由于所有函数都具有相同的签名,您可以使用该签名定义 Pets 映射以避免类型断言的需要

var Pets = map[string]func(name string) Pet

https://play.golang.org/p/-cz1vX-cMs