我试图用字符串值(名称)来识别结构。 reflect.TypeOf返回Type。但是类型断言需要一个type.我怎样才能投射Type到type?或者有什么建议来处理它?http://play.golang.org/p/3PJG3YxIyfpackage mainimport ("fmt""reflect")type Article struct { Id int64 `json:"id"` Title string `json:"title",sql:"size:255"` Content string `json:"content"`}func IdentifyItemType(name string) interface{} { var item interface{} switch name { default: item = Article{} } return item}func main() { i := IdentifyItemType("name") item := i.(Article) fmt.Printf("Hello, item : %v\n", item) item2 := i.(reflect.TypeOf(i)) // reflect.TypeOf(i) is not a type fmt.Printf("Hello, item2 : %v\n", item2)}
3 回答
12345678_0001
TA贡献1802条经验 获得超5个赞
如果您需要打开外部接口的类型,则不需要反射。{}
switch x.(type){
case int:
dosomething()
}
...但是如果您需要在界面中打开属性的类型,那么您可以这样做:
s := reflect.ValueOf(x)
for i:=0; i<s.NumValues; i++{
switch s.Field(i).Interface().(type){
case int:
dosomething()
}
}
我还没有找到更干净的方法,我很想知道它是否存在。
大话西游666
TA贡献1817条经验 获得超14个赞
类型断言在语法上采用括号中的类型,而不是表达式。所以这是一个语法错误。
您似乎正在尝试使用在运行时计算的值进行类型断言。那有意义吗?让我们考虑一下什么是类型断言。
类型断言包括两件事:
在编译时:它使结果表达式具有所需的编译时类型。该表达式
x.(T)
具有编译时类型T
。这允许您执行可以使用 type 执行的表达式T
,而您可能无法使用 of 的类型执行这些表达式x
。在运行时:它检查值是否不是
nil
给定的类型,并且实际上是给定的类型,如果不是,它会导致恐慌。
第一部分显然对于在运行时计算的类型没有意义。结果表达式的编译时类型不能依赖于编译时未知的东西。
第二个(运行时检查)可以使用在运行时计算的类型来完成。就像是:
if reflect.TypeOf(x) != someTypeComputedAtRuntime {
panic(42)
}
- 3 回答
- 0 关注
- 356 浏览
添加回答
举报
0/150
提交
取消