这是我的例子: http://play.golang.org/p/D608cYqtO5
基本上我想这样做:
theType := reflect.TypeOf(anInterfaceValue)
theConvertedValue := anInterfaceValue.(theType)
答案 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来进行类型修复。然后,您可以在值上随机设置内容,但如果对类型执行非法操作,则会发生混乱。
如果您想从编译器的类型检查中受益,您必须列举不同的案例。