【go笔记】指针, uintptr, unsafe.Pointer

作者:佚名    更新日期:2025-06-22
本文简要整理了三种Go语言中的指针概念:普通指针(*T), uintptr, unsafe.Pointer。
普通指针(*T)是Go中基本的指针类型,用于传递对象地址,进行&运算和*运算来获取地址值和值。这类指针不支持运算。
uintptr是无符号整型,用于保存指针地址,支持指针运算。然而,它不能持有对象,GC不会将其视为指针,因此无法阻止目标对象被回收。取值时需要先转为unsafe.Pointer,再转为相应指针类型。
unsafe.Pointer则能指向任意类型指针,不支持指针运算,不能直接读取内存值(需转为对应类型指针读取)。它作为桥梁,实现不同指针类型间的转换,也可转换为uintptr进行指针运算。
通常的指针运算流程为:unsafe.Pointer转换为uintptr -> 进行算术运算 -> 将uintptr转换回unsafe.Pointer,再转换为访问目标对象的指针类型。
下面是简单的测试案例,展示了数组、struct、slice和map的指针使用。
欢迎读者提供意见并参与讨论。
联系邮箱: [email protected]

~