gpt4 book ai didi

go - 如何返回结构的实例,惯用的方式

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:07 24 4
gpt4 key购买 nike

我有一个函数,它根据它接受的参数返回结构实例

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com