深度解密Go語言之unsafe

2021-09-27 10:32:47 字數 595 閱讀 8814

限制一:go的指標不能進行數**算

來看乙個簡單的例子:

a := 5p := &a

p++p = &a + 3

上面的**將不能通過編譯,會報編譯錯誤:invalid operation,也就是說不能對指標做數**算。

限制二:不同型別的指標不能相互轉換

例如下面這個簡短的例子:

func main()
也會報編譯錯誤:

cannot use &a (type *int) as type *float64 in assignment
限制三:不同型別的指標不能使用==或!=比較

只有在兩個指標型別相同或者可以相互轉換的情況下,才可以對兩者進行比較。另外,指標可以通過==!=直接和nil作比較。

限制四:不同型別的指標變數不能相互賦值

這一點同限制三。

參考

深度解密Go語言之map

1 實現map最主要的資料結構有兩種 雜湊查詢表 hashtable 搜尋樹 searchtree go語言的map採用雜湊查詢表實現。2 雜湊查詢表一般會存在 碰撞 的問題。有兩種常用解決辦法 鍊錶法和開放位址法。go語言採用的是鍊錶法。3 自平衡搜尋樹法的最差搜尋效率是 o logn 而雜湊查詢...

go語言之陣列的深度理解

陣列指標和指標陣列 陣列指標 我們可以宣告乙個指標變數,指向乙個陣列 arr int 陣列指標 var ptr int arr 簡寫 ptr arr指標陣列 就是乙個陣列裡面存放的都是指標 x,y 1,2var arrptr 5 int 沒有手動初始化的元素,已經自動初始化指標型別對應的零值 nil...

Go語言之GO 語言常量

相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...