golang反射断言类型不固定怎么定义?

image.png

假如箭头所指的断言结构体不固定怎么写,如果是普通的int或者string直接就能.(int)断言了,但是我目前的场景需要支持多种结构体,我想直接b := aValue.Interface().(*reflect.TypeOf(a)),但是并不支持这样写

阅读 1.7k
2 个回答
新手上路,请多包涵

你是想把 A 结构体的值转化成其他 结构体吗?
如果是,我觉得直接字段赋值就可以了。

我不明白为什么要用上反射包

新手上路,请多包涵
参加官方文档:Type assertions

泛型

可以考虑采用golang新版本中泛型。但是有问题的是,当前golang的泛型支持并不建议用于生产环境。

link: Go 1.18 Release Notes
These new language changes required a large amount of new code that has not had significant testing in production settings.

其他封装方式

可以考虑的是“是否一定需要转换为结构体”。是需要使用特定的方法还是属性值呢?

  • 如果是属性值

    • 可以考虑多个结构体进行进行才分,然后继承在使用。
  • 如果是方法

    • 可以考虑使用接口来定义。并且使用接口的时候,获取属性值也是可以涵盖的。

即,可以考虑go思想下的设计方案来实现需求。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题