Go中的工厂模式

时间:2017-10-03 17:01:51

标签: go factory-pattern

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

我有一个界面宠物和一个结构所以应该具有宠物的属性,这种情况只有一个是硬币,当试图通过工厂 NewPet 初始化对象 Dog 时,有人可以提供建议。

1 个答案:

答案 0 :(得分:6)

您的NewPet工厂在类型断言中返回类型Pet,而不是*Pet。 (你很少想要一个指向接口的指针)

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

您的Pet构造函数还需要返回类型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