就我而言,我有2个变量,其数据类型为*uint64
和*uint32
。我需要将它们转换为int
数据类型。
当我尝试使用int()
函数将其转换时,会引发以下错误:
无法将* uint64类型的表达式转换为int类型。
我注意到,如果数据类型没有int()
字符,则相同的* (asterisk)
函数可以正常工作。
所以我的问题是如何将*uint64
和*uint32
数据类型正确转换为int
数据类型?
最佳答案
您不能(不应)将指针转换为int
,最可能要做的就是将指针值转换为int
。
因此,只需取消指针的引用即可获得uint64
和uint32
值,可以将其转换为:
var i *uint64 = new(uint64)
var j *uint32 = new(uint32)
*i = 1
*j = 2
var k, l int
k = int(*i)
l = int(*j)
fmt.Println(k, l)
输出(在Go Playground上尝试):
1 2
请注意,当然,如果指针是
nil
,则尝试取消引用它(如*i
)会导致运行时出现紧急情况。还要注意,
int
的大小(以及有效范围)取决于平台,可能是64位和32位。因此,将任何uint64
值转换为int
可能会丢失高32位,并且某些正输入数可能会变成负数。