背景:我正在尝试缓存一些结构体信息以提高效率,但无法区分同一个包内的同名结构体。示例代码: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] 相等性,请直接比较类型。
- 1 回答
- 0 关注
- 217 浏览
添加回答
举报
0/150
提交
取消