报告从 uintptrunsafe.Pointer 的潜在错误转换。

如果内存中有持有指针值的 uintptr 类型的字,那么从 uintptrunsafe.Pointer 的转换无效,因为这个字对于堆栈复制和垃圾收集器是不可见的。

用法无效的示例:

nums := []int8{42, 24}
ptr := unsafe.Pointer(&nums[0])
addr := uintptr(ptr) // 地址存储到本地变量
ptr = unsafe.Pointer(addr + uintptr(1))

用法有效的示例:

nums := []int8{42, 24}
ptr := unsafe.Pointer(&nums[0])
ptr = unsafe.Pointer(uintptr(ptr) + uintptr(1))