我有函数返回结构实例取决于它所需要的参数
func Factory(s string) interface{} {
if s == 'SomeType' {
return SomeType{}
} else if s == 'AnotherType' {
return AnotherType{}
}
}
如果我要返回几个结构,则此解决方案很好,但如果有很多结构,这将变得很丑陋,我可以采用其他方法吗?有惯用的方法吗?
最佳答案
如评论所述,您可以为类型使用 map 。看起来像这样。如果该类型存在,则工厂函数将返回一个实例,否则将返回nil。
包主
import (
"fmt"
"reflect"
)
type SomeType struct{ Something string }
type AnotherType struct{}
type YetAnotherType struct{}
var typemap = map[string]interface{}{
"SomeType": SomeType{ Something: "something" },
"AnotherType": AnotherType{},
"YetAnotherType": YetAnotherType{},
}
func factory(s string) interface{} {
t, ok := typemap[s]
if ok {
return reflect.ValueOf(t)
}
return nil
}
func main() {
fmt.Printf("%#v\n", factory("SomeType"))
fmt.Printf("%#v\n", factory("NoType"))
}
Playground link
关于go - 如何返回结构实例,惯用方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55306399/