unsafe包的使用

2021-09-27 06:16:30 字數 731 閱讀 4283

1.

var x string

fmt.println(unsafe.sizeof(x))

//輸出16.因為string的底層結構為

type stringstruct struct

2.var s int

fmt.println(unsafe.sizeof(s))

//輸出24.因為切片的底層結構為

pointer型別用於表示任意型別的指標。有4個特殊的只能用於pointer型別的操作:

1) 任意型別的指標可以轉換為乙個pointer型別值

2) 乙個pointer型別值可以轉換為任意型別的指標

3) 乙個uintptr型別值可以轉換為乙個pointer型別值

4) 乙個pointer型別值可以轉換為乙個uintptr型別值

type t struct 

t:= &t

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))))

go中的unsafe包及使用詳解

unsafe code是一種繞過go型別安全和記憶體安全檢查的go 大多數情況,unsafe code是和指標相關的。但是要記住使用unsafe code有可能會損害你的程式,所以,如果你不完全確定是否需要用到unsafe code就不要使用它。以下面的 unsafe.go 為例,看一下unsafe...

C 中unsafe的使用

1.unsafe在c 程式中的使用場合 1 實時應用,採用指標來提高效能 2 引用非.net dll提供的如c 編寫的外部函式,需要指標來傳遞該函式 3 除錯,用以檢測程式在執行過程中的記憶體使用狀況。2.使用unsafe的利弊 帶來麻煩是 非法修改了某些變數 記憶體洩漏。3.unsafe與unma...

C 中unsafe的使用

1.unsafe在c 程式中的使用場合 2.使用unsafe的利弊 麻煩是 非法修改了某些變數 記憶體洩漏。3.unsafe與unmanaged的區別 managed code是在clr監管下執行的程式。以下任務由clr來執行 管理物件記憶體,型別安全檢測和冗餘處理。從另一方面來說,unmanage...