我正在使用哈希函数murmur2,该函数返回一个uint64。
murmur2
uint64
然后,我想将其存储在仅支持BIGINT(带符号的64位)的PostgreSQL中。
BIGINT
因为我对数字本身不感兴趣,但对二进制值(因为我将其用作检测唯一性的ID(我的值集为〜1000个值,一个64位的哈希值对我来说足够了)),我想int64通过“只是”更改类型将其转换为。
int64
如何以一种使编译器满意的方式做到这一点?
您可以简单地使用类型转换:
i := uint64(0xffffffffffffffff) i2 := int64(i) fmt.Println(i, i2)
输出:
18446744073709551615 -1
转换uint64为int64始终成功:它不会仅更改类型的内存表示。如果您尝试将无类型的整数常量值转换为int64:,可能会使您感到困惑。
i3 := int64(0xffffffffffffffff) // Compile time error!
这是一个编译时错误,因为常量0xffffffffffffffff(用任意精度表示)不适合,int64因为适合的最大值int64为0x7fffffffffffffff:
0xffffffffffffffff
0x7fffffffffffffff
constant 18446744073709551615 overflows int64