Go 尝试生成唯一int64时生成负数的代码
我正在尝试使用下面的Go代码创建唯一的int64Go 尝试生成唯一int64时生成负数的代码,go,unix-timestamp,Go,Unix Timestamp,我正在尝试使用下面的Go代码创建唯一的int64 unixtimestamp := time.Now().UnixNano() node := AppConfig.NodeID << 44 timestamp := unixtimestamp << 12 var sequenceID int64 for sequenceID = 1; sequenceID <= count; sequenceID++ { id :=
unixtimestamp := time.Now().UnixNano()
node := AppConfig.NodeID << 44
timestamp := unixtimestamp << 12
var sequenceID int64
for sequenceID = 1; sequenceID <= count; sequenceID++ {
id := node | timestamp | sequenceID
idList = append(idList, id)
}
unixtimestamp:=time.Now().UnixNano()
node:=AppConfig.NodeID检查是否为负值使其为正值:
unixtimestamp := time.Now().UnixNano()
node := AppConfig.NodeID << 44
timestamp := unixtimestamp << 12
var sequenceID int64
for sequenceID = 1; sequenceID <= count; sequenceID++ {
id := node | timestamp | sequenceID
if id < 0 {
id = id * -1
}
idList = append(idList, id)
}
unixtimestamp:=time.Now().UnixNano()
node:=AppConfig.NodeID最简单的修复方法是将int64
值转换为uint64
。正确的解决方案?我们需要更多地了解您的算法和算法中涉及的值。@icza谢谢,我正在尝试为db table unique bigint列生成unique int64,以使负数与-1相乘在几乎所有情况下都有效。@Volker如果负数是uniq而不是与任何数字相乘,它能保证唯一性吗!=0不会使它们变为非nuique,尤其是如果乘以-1时,因为这不会(在几乎所有情况下)溢出。我猜你生成“uniq”数字的方法有很大的缺陷,而它们是负数是迄今为止你最小的问题。