这是我的示例:http : //play.golang.org/p/D608cYqtO5
基本上我想这样做:
theType := reflect.TypeOf(anInterfaceValue)
theConvertedValue := anInterfaceValue.(theType)
记法
value.(type)
称为类型断言。type
断言中的in必须在编译时知道,它始终是类型名称。
在您的游乐场示例中,SetStruct2
可以使用类型开关为其第二个参数处理不同的类型:
switch v := value.(type) {
case Config:
// code that uses v as a Config
case int:
// code that uses v as an int
}
但是,您不能断言接口是动态的(例如在代码中)。因为否则编译器将无法对您的程序进行类型检查。
编辑:
如果没有其他方法,我不想一一列举吗?
您可以使用反射来进行类型无关的工作。然后,您可以在值上随机设置填充,但是如果您对类型执行非法操作,则将出现恐慌。
如果要从编译器的类型检查中受益,则必须枚举不同的情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句