在golang中,如何键入一个接口{}到一个由reflect.Type指定的类型?

时间:2015-10-13 01:05:49

标签: go

例如,我有一个名为interface{}的{​​{1}},我还有a名为reflect.Type。现在,我想键入断言a到elemType,但elemType无法成功编译。如何解决?

抱歉我的表情令人困惑。我的意思是我从一个函数中获取一个类型,并且我想键入一个接口{}到这个类型,但是这个类型存储在一个reflect.Type变量中。

我想要做的是类似下面的代码:

a.(elemType)

1 个答案:

答案 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")
}

但是你需要一个具体的类型来返回标准变量。如果你只有一小部分可能的类型,也许使用类型开关可能会做你想要的。