Go學習筆記--go指標:unsafe.Pointer
阿新 • • 發佈:2019-02-12
Go語言是個強型別語言。也就是說Go對型別要求嚴格,不同型別不能進行賦值操作。指標也是具有明確型別的物件,進行嚴格型別檢查。下面的程式碼會產生編譯錯誤 :
package main import ( "fmt" ) func main() { u := uint32(32) i := int32(1) fmt.Println(&u, &i) // 打印出地址 p := &i // p 的型別是 *int32 p = &u // &u的型別是 *uint32,於 p 的型別不同,不能賦值 p = (*int32)(&u) // 這種型別轉換語法也是無效的 fmt.Println(p) }
unsafe 包提供的Pointer方法可以完成這個任務
package main
import (
"fmt"
"unsafe"
)
func main() {
u := uint32(32)
i := int32(1)
fmt.Println(&u, &i)
p := &i
p = (*int32)(unsafe.Pointer(&u))
fmt.Println(p)
}
注意:實際使用中unsafe可用場景很少,稍微複雜一點的結構,比如struct,unsafe根本不能適用