Unsafe
通过unsafe访问和修改结构体变量
package unsafe
import (
"fmt"
"testing"
"unsafe"
)
func TestUnsafe(t *testing.T) {
p := &Programmer{Name: "zhaohongfeng", Age: 18}
name := (*string)(unsafe.Pointer(p))
fmt.Println(*name)
age := (*int)(unsafe.Pointer(uintptr(unsafe.Pointer(p)) + unsafe.Offsetof(p.Age)))
fmt.Println(*age)
}
type Programmer struct {
Name string
Age int
}
获取string结构体,data属性地址
dataPtr = unsafe.StringData(str)
string和byte数组零复制转换
func string2bytes(s string) []byte {
return *(*[]byte)(unsafe.Pointer(&s))
}
func bytes2string(b []byte) string{
return *(*string)(unsafe.Pointer(&b))
}