为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
明月笑刀无情 2021-09-27 10:32:00
这是我的例子:http : //play.golang.org/p/D608cYqtO5基本上我想这样做:theType := reflect.TypeOf(anInterfaceValue)theConvertedValue := anInterfaceValue.(theType)
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

符号


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

}

但是,您不能将接口断言为动态的(例如在您的代码中)。因为否则编译器无法对您的程序进行类型检查。


编辑:


如果有另一种方法,我不想一个一个地处理它们?


您可以使用反射以与类型无关的方式工作。然后你可以在值上随机设置东西,但如果你对一个类型执行非法操作,它会恐慌。


如果您想从编译器的类型检查中受益,则必须枚举不同的情况。


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 247 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信