[英]Assert type based on a string?
假设我有以下内容:
type T struct { Name string }
然后我创建一个类型为 T 的 var:
thing := T{"Hello World"}
然后我反映类型:
t := reflect.TypeOf(thing) // main.T
然后我将t
传递给一个接受接口的方法,如果我有那个字符串,我有什么办法可以说,在那个方法中,接受的interface{}
是main.T
类型吗?
用例是我有一个适合类型的 json 字符串。 我有一个该类型的字符串 ( main.T
),我希望能够创建一个main.t
类型的新变量,当我只知道字符串main.T
然后将数据编组到该新变量时。
Go 运行时不提供根据类型名称创建值的方法,但您可以在应用程序中实现这一点:
var types = map[string]reflect.Type{
"main.T": reflect.TypeOf((*T)(nil)).Elem(),
}
您可以使用以下名称创建一个给定名称的新值:
v := reflect.New(types[name]).Interface()
这假定 name 是有效名称。 您可能需要检查 types[name] == nil 的情况。
你也可以不经思考地做到这一点:
var types = map[string]func() interface{} {
"main.T": func() interface{} { return &T{} }
}
v := types[name]()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.