golang中的Uint和uintptr

zbsbpyhn  于 2023-04-18  发布在  Go
关注(0)|答案(1)|浏览(195)

我知道uintptr的大小与Go语言中的uint遵循相同的规则;我猜uintuintptr是相同的,只是它们在用例中是不同的。那么为什么uintptr不是uint在go内置程序中的别名,就像byte是uint8的别名,runeint32的别名一样?

y53ybaqx

y53ybaqx1#

根据Go语言规范,以下是如何定义“unsized”整数数据类型的大小:
uint 32位或64位
int与uint大小相同
uintptr一个足够大的无符号整数,可以存储指针值的未解释位
正如你所看到的,这两种类型都有一个 distinct 的大小定义。即使它们在大多数(?)平台上恰好是相同的大小,也没有语言级别的原因为什么要将这些类型合并。
为指针整数指定不同类型还有一个好处:由于Go语言有严格的类型,你不能将uintptr作为任何其他int类型使用,除非先转换它。这很重要,因为uintptr在Go语言中主要用于unsafe目的,所以当你可能滥用不安全的功能时,有一个不同的类型会给出强烈的指示或错误(或者至少,它会让你三思而后行)。

相关问题