uint数据类型的长度不是固定不变的,而是和平台位数相关,因此可以使用uint判断平台位数。

代码示例

示例1:

func main() {
  fmt.Println(32 << (^uint(0) >> 63)) // 输出32,则为32位;输出64,则为64位
}
unsafe.Sizeof()
func main() {
    var a uint = 0
    fmt.Println(unsafe.Sizeof(a)) // 输出4(Byte),则为32位;输出8(Byte),则为64位
}
解释
平台位数 uint位数 ^uint(0) ^uint(0) >> 63 32 << (^uint(0) >> 63)
32 32 2^32 - 1 0 32
64 64 2^64 - 1 1 64
参考