Go 故意溢出

Go 故意溢出,go,type-conversion,integer-overflow,Go,Type Conversion,Integer Overflow,我正在使用哈希函数2,它返回一个uint64 然后我想将其存储在PostgreSQL中,它只支持BIGINT(带符号的64位) 由于我对数字本身不感兴趣,而只对二进制值感兴趣(因为我使用它作为检测唯一性的id(我的一组值约为1000个值,64位哈希对我来说就足够了),所以我想通过“仅仅”更改类型将其转换为int64 如何以令编译器满意的方式实现这一点?您只需使用一个类型: 输出: 18446744073709551615 -1 将uint64转换为int64始终成功:它不会仅更改类型而更改内存

我正在使用哈希函数
2
,它返回一个
uint64

然后我想将其存储在PostgreSQL中,它只支持
BIGINT
(带符号的64位)

由于我对数字本身不感兴趣,而只对二进制值感兴趣(因为我使用它作为检测唯一性的id(我的一组值约为1000个值,64位哈希对我来说就足够了),所以我想通过“仅仅”更改类型将其转换为
int64

如何以令编译器满意的方式实现这一点?

您只需使用一个类型:

输出:

18446744073709551615 -1
uint64
转换为
int64
始终成功:它不会仅更改类型而更改内存表示形式。如果尝试将非类型化的整型常量值转换为
int64
,可能会使您感到困惑:

i3 := int64(0xffffffffffffffff) // Compile time error!
这是一个编译时错误,因为常量值
0xffffffffffffff
(以任意精度表示)不适合
int64
,因为适合
int64
的最大值是
0x7ffffffffffffff

constant 18446744073709551615 overflows int64

好的,是的,我对类型转换是如何工作的有一个错误的印象,谢谢你澄清
constant 18446744073709551615 overflows int64