01、Pointer类型
unsafe包下,有定义type Pointer *ArbitraryType(任意类型指针),可绕过GO的类型限制,type ArbitraryType int
- 任何类型的指针值都可以转换为Pointer。
- Pointer可以转换为任何类型的指针值。
- uintptr可以转换为Pointer。
- Pointer可以转换为uintptr。
02、使用示例
在math包下,unsafe.go文件中大量使用,例如
func Float32bits(f float32) uint32 { return *(*uint32)(unsafe.Pointer(&f)) }
func Float64bits(f float64) uint64 { return *(*uint64)(unsafe.Pointer(&f)) }
03、uintptr定义
在buildin.go文件中,type uintptr uintptr,uintptr是integer类型,可存放任意长度的指针值。
此文件只是给预定义标识符添加文档,实际GO语言没有这种语法