← 返回首页

Go语言普通指针和unsafe.Pointer有什么区别?

普通指针比如*int、*string,它们有明确的类型信息,编译器会进行类型检查和垃圾回收跟踪。

不同类型的指针之间不能直接转换,这是Go类型安全的体现。

而unsafe.Pointer是Go的通用指针类型,可以理解为C语言中的void*,它绕过了Go的类型系统。unsafe.Pointer可以与任意类型的指针相互转换,也可以与uintptr进行转换来做指针运算。

另外,通指针受GC管理和类型约束,unsafe.Pointer不受类型约束但仍受GC跟踪。