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

区分同一个包中同名的结构体

区分同一个包中同名的结构体

Go
红糖糍粑 2021-11-22 19:53:06
背景:我正在尝试缓存一些结构体信息以提高效率,但无法区分同一个包内的同名结构体。示例代码:func Struct(s interface{}){  val := reflect.ValueOf(s)  typ := val.Type()  // cache in map, but with what key?   typ.Name()               // not good enough  typ.PkgPath + typ.Name() // not good enough}func Caller1() {  type Test struct {    Name string  }  t:= Test{    Name:"Test Name",  }  Struct(t)}func Caller2() {  type Test struct {    Address string    Other string  }  t:= Test{    Address:"Test Address",    Other:"OTHER",  }  Struct(t)}问题找不到合适的唯一键:名称相同的“测试”PkgPath 相同,因为两个函数都在同一个包中指针等已失效,因为需要一致的键,否则缓存将毫无意义任何人都可以帮助找到一种唯一标识这些结构的方法吗?PS我确实意识到更改结构名称可以解决问题,但需要处理这种情况,因为我有一个其他人将调用的通用库,并且可能具有如上例那样定义的结构。
查看完整描述

1 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

要唯一标识地图中的类型,请reflect.Type用作地图键:

var cache map[reflect.Type]cachedType

这是反射文档推荐的:

要测试 [type] 相等性,请直接比较类型。


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

添加回答

举报

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