亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言中unsafe如何使用

發布時間:2021-07-06 15:51:35 來源:億速云 閱讀:156 作者:Leah 欄目:大數據

這期內容當中小編將會給大家帶來有關Go語言中unsafe如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1.指針類型介紹:

對于Go語言的指針類型來說,指針類型的限制比較多,主要有四點,并且在Go語言的編譯階段就可以檢測出來。

限制1: 指針不可以進行數學計算。

限制2:不同類型的指針不能夠相互賦值。

限制3:不同類型的指針不能夠==或者!=的比較操作。

限制4:不同類型的指針不能夠相互轉化。

備注:Go語言又對類型要求的非常嚴格,就連type INT int中的int和INT都認為不是同一種類型,這就導致了指針的限制條件更加苛刻了。

1)指針變量正常使用的例子:

Go語言中unsafe如何使用

2)指針變量受限制的例子:

Go語言中unsafe如何使用

2. unsafe介紹

通過前面指針類型的介紹,我們能夠看出來unsafe之所以存在,就是因為Go語言對指針類型的限制太苛刻導致的。而unsafe的出現,恰恰彌補了指針變量的這些限制,不過從Go語言的設計者的角度來說,其實他們是不希望大家使用unsafe這個包的,不過有些場景又不得不用它,所以才特意起了個名字叫做unsafe的包,來使用它。

2.1 unsafe使用的場景

場景1:解決第三方庫提供的指針類型所使用的數據類型的不匹配問題。

場景2:解決數據結構體中,不可見屬性的取值和修改操作。

2.2 unsafe的特點

場景1:任何類型的指針均可以轉換成unsafe.Pointer,unsafe.Pointer也可以轉換成任何類型的指針,例子如下所示:

Go語言中unsafe如何使用

通過上面例子,以及輸出結果,我們可以看出,unsafe.Pointer可以將int類型的指針變量轉換成float32類型的指針變量。

場景2: uintptr 可以轉換為 Pointer,Pointer 也可以轉換為 uintptr,例子如下:

Go語言中unsafe如何使用

結果分析:通過上例的輸出結果,可以看出unsafe包是如何來操作,以及修改數據結構Node中不可見的元素age和name的。在修改Node中的第一個元素的時候,我們只需要取到該數據結構的存儲位置就可以;在修改后續的元素的時候,我們需要采用unsafe.Offsetof計算偏移的方式來找到對應的元素的存儲位置,然后再去修改這個數據。

2.3 uintptr不要賦值給臨時變量

從 GC 的角度來看,uintptr 類型的臨時變量只是一個無符號整數,并不知道它是一個指針地址,因此當滿足一定條件后,ptr 這個臨時變量是可能被垃圾回收掉的,所以我們不能夠將uintptr(nP)先賦值給一個臨時變量,在進行后面的取地址操作,代碼如下所示:

Go語言中unsafe如何使用

上述就是小編為大家分享的Go語言中unsafe如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊吾县| 中卫市| 福州市| 同心县| 疏附县| 沾益县| 卢氏县| 铅山县| 呼图壁县| 荣昌县| 芦溪县| 万全县| 镇远县| 太仆寺旗| 正蓝旗| 阳新县| 青海省| 南乐县| 大渡口区| 弥渡县| 白沙| 行唐县| 嘉定区| 九江市| 平和县| 平湖市| 永春县| 成安县| 靖远县| 松江区| 中西区| 黄平县| 邵东县| 分宜县| 日喀则市| 仪陇县| 大同县| 江安县| 德惠市| 庆城县| 北辰区|