91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

韶山市| 浮梁县| 翼城县| 大竹县| 宜兰市| 安多县| 株洲县| 乌审旗| 弥勒县| 太仆寺旗| 万源市| 黄山市| 灵台县| 清远市| 二手房| 抚州市| 日喀则市| 苏州市| 娄底市| 乐亭县| 静乐县| 平湖市| 盐津县| 阿坝县| 青川县| 渭南市| 陕西省| 凌云县| 长汀县| 永泰县| 张北县| 永昌县| 东乌珠穆沁旗| 和顺县| 红河县| 蒙城县| 平定县| 福泉市| 上林县| 乌苏市| 峡江县|