AppIdLeveledHashKeyTimeKeyHour

AppIdLeveledHashKeyTimeKeyHour

例如,我用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 。

10-01 12:25