例如,我用Thrift 0.9.1尝试了golang生成,
节俭的定义,
struct AppIdLeveledHashKeyTimeKeyHour {
1: required i32 appId
2: required LeveledHashKey leveledHashKey
3: required TimeKeyHour timeKeyHour
}
typedef map<AppIdLeveledHashKeyTimeKeyHour, ...sth else...> EventSliceShardIdValue
在生成的代码中,EventSliceShardIdValue将为
type EventSliceShardIdValue map[*AppIdLeveledHashKeyTimeKeyHour]EventSliceAppIdLeveledHashKeyTimeKeyHourValue
您可以找到关键部分是代表内存地址的指针。在golang中,指针作为映射键(而不是值或obj的哈希值)在大多数情况下是无用的。要将某些字段的组合用作映射键,定义应使用类似
map[AppIdLeveledHashKeyTimeKeyHour]EventSliceAppIdLeveledHashKeyTimeKeyHourValue
这是Thrift的支持计划的问题吗(或者我滥用了某事)?有什么解决方法可以节俭地解决此问题?
最佳答案
结构(无指针)只能在某些有限的情况下用作映射键(每个http://golang.org/ref/spec#Comparison_operators必须可比); AppIdLeveledHashKeyTimeKeyHour
可能不适合此定义,因此,如果不使用指针作为键,则实际上不可能构建 map 。