用網(wǎng)站做自我介紹自己四川seo排名
是什么?為什么?
如何利用unsafe包修改私有成員?
結(jié)構(gòu)體會被分配到一塊連續(xù)的內(nèi)存,結(jié)構(gòu)體的地址也代表第一個成員的地址。
如何利用unsafe包獲取slice和map的長度?
// 利用unsafe包修改私有成員
type S struct {name stringlanguage stringage int
}func main() {s := S{name: "張三",language: "英語",age: 4,}name := (*string)(unsafe.Pointer(&s))*name = "qcrao"lang := (*string)(unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + unsafe.Offsetof(s.language)))*lang = "Golang"age := (*int)(unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + unsafe.Offsetof(s.age)))*age = 1fmt.Println(s)
}
// 利用unsafe獲取切片和map的長度.
func main() {s := make([]int, 9, 20)var Len = *(*int)(unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + uintptr(8)))fmt.Println(Len, len(s)) // 9 9var Cap = *(*int)(unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + uintptr(16)))fmt.Println(Cap, cap(s)) // 20 20mp := make(map[string]int)mp["qcrao"] = 100mp["stefno"] = 18count := **(**int)(unsafe.Pointer(&mp))fmt.Println(count, len(mp)) // 2 2
}