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、slice定義,底層為可容納所有類型的數組指針
type slice struct {
array unsafe.Pointer
len int
cap int
}
04、uintptr定義
在buildin.go文件中,type uintptr uintptr,uintptr是integer類型,可存放任意長度的指針值。
此文件只是給預定義標識符添加文檔,實際GO語言沒有這種語法