首页 > 解决方案 > 尝试生成唯一 int64 时生成负数的代码

问题描述

我正在尝试使用以下 Go 代码创建唯一的 int64

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)
    }

上面的代码也在生成负数。我如何解决它?

标签: gounix-timestamp

解决方案


检查它是否为负,使其为正:

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)
}

推荐阅读