符号
value.(type)
被称为类型断言。将type在某个断言在编译时是已知的,它总是一个类型名称。
在您的游乐场示例中,SetStruct2可以使用类型开关来处理其第二个参数的不同类型:
switch v := value.(type) {
case Config:
// code that uses v as a Config
case int:
// code that uses v as an int
}
但是,您不能将接口断言为动态的(例如在您的代码中)。因为否则编译器无法对您的程序进行类型检查。
如果有另一种方法,我不想一个一个地处理它们?
您可以使用反射以与类型无关的方式工作。然后你可以在值上随机设置东西,但如果你对一个类型执行非法操作,它会恐慌。
如果您想从编译器的类型检查中受益,则必须枚举不同的情况。