1:求各類型的長度
1.
var x string
fmt.Println(unsafe.Sizeof(x))
//輸出16.因爲string的底層結構爲
type stringStruct struct {
str unsafe.Pointer
len int
}
2.
var s []int
fmt.Println(unsafe.Sizeof(s))
//輸出24.因爲切片的底層結構爲{*ptr,len ,cap}
2:通過偏移取值
Pointer類型用於表示任意類型的指針。有4個特殊的只能用於Pointer類型的操作:
1) 任意類型的指針可以轉換爲一個Pointer類型值 2) 一個Pointer類型值可以轉換爲任意類型的指針 3) 一個uintptr類型值可以轉換爲一個Pointer類型值 4) 一個Pointer類型值可以轉換爲一個uintptr類型值
type T struct {
x int
y int
z string
}
t:= &T{1,2,"abc"}
ptr:=unsafe.Pointer(t)
fmt.Println("x=",*((*int)(ptr)))
fmt.Println("y=",*(*int)(unsafe.Pointer(uintptr(ptr)+unsafe.Offsetof(t.y))))
fmt.Println("z=",*(*string)(unsafe.Pointer(uintptr(ptr)+unsafe.Offsetof(t.z))))