如何在Golang中在运行时动态转换类型?

时间:2015-03-23 09:53:09

标签: reflection go runtime

这是我的例子: http://play.golang.org/p/D608cYqtO5

基本上我想这样做:

theType := reflect.TypeOf(anInterfaceValue)
theConvertedValue := anInterfaceValue.(theType)

1 个答案:

答案 0 :(得分:5)

符号

value.(type)

称为type-assertion。断言中的type必须在编译时知道,并且它始终是类型名称。

在你的游乐场示例SetStruct2可以使用type-switch来处理第二个参数的不同类型:

switch v := value.(type) {
case Config:
    // code that uses v as a Config
case int:
    // code that uses v as an int
}
但是,您不能断言接口是动态的(如代码中)。因为否则编译器无法对您的程序进行类型检查。

编辑:

  

如果有其他方法,我不想一个一个地提出这些问题吗?

您可以使用reflection来进行类型修复。然后,您可以在值上随机设置内容,但如果对类型执行非法操作,则会发生混乱。

如果您想从编译器的类型检查中受益,您必须列举不同的案例。