例如,我有一个名为interface{}
的{{1}},我还有a
名为reflect.Type
。现在,我想键入断言a到elemType
,但elemType
无法成功编译。如何解决?
抱歉我的表情令人困惑。我的意思是我从一个函数中获取一个类型,并且我想键入一个接口{}到这个类型,但是这个类型存储在一个reflect.Type变量中。
我想要做的是类似下面的代码:
a.(elemType)
答案 0 :(得分:2)
在Go中考虑标准类型断言:
v := a.(typeName)
这里编译器可以在编译时确定变量v
的类型,并在编译涉及变量的任何进一步语句时利用这些知识。
使用断言中使用refltect.Type
变量的示例,无法确定v
的类型,因此无法编译代码。
如果需要在运行时检查特定接口变量是否为特定类型,您仍然可以使用reflect
包执行此操作。例如:
// if elemType is a normal type
if reflect.ValueOf(a).Type() == elemType {
fmt.Println("type matches")
}
// if elemType is an interface, can check if the value implements it
if reflect.ValueOf(a).Type().Implements(elemType) {
fmt.Println("value implements interface")
}
但是你需要一个具体的类型来返回标准变量。如果你只有一小部分可能的类型,也许使用类型开关可能会做你想要的。