最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go中unsafe.Pointer類型的使用小結(jié)

 更新時間:2026年02月05日 09:39:49   作者:Kevin666  
unsafe.Pointer?是?Go?語言標(biāo)準(zhǔn)庫?unsafe?包中的一個特殊類型,用于在不同類型的指針之間進(jìn)行?無類型轉(zhuǎn)換,允許你繞過?Go?的類型系統(tǒng)進(jìn)行底層操作,感興趣的可以了解一下

unsafe.Pointer 是 Go 語言標(biāo)準(zhǔn)庫 unsafe 包中的一個特殊類型,用于在不同類型的指針之間進(jìn)行 無類型轉(zhuǎn)換,允許你繞過 Go 的類型系統(tǒng)進(jìn)行底層操作,屬于“不安全”的操作。

?? 使用場景

  • 類型不兼容的指針轉(zhuǎn)換(例如從 *int 轉(zhuǎn)為 *float64)
  • 與 uintptr 配合操作底層內(nèi)存地址
  • 修改只讀字段(例如字符串的只讀字節(jié))
  • 實現(xiàn)類似 C 的結(jié)構(gòu)體偏移訪問

和普通指針的區(qū)別

unsafe.Pointer 和普通的 &T 指針(即 *T)在 Go 中有本質(zhì)上的區(qū)別

類型說明
*T是類型安全的指針,指向類型 T 的數(shù)據(jù)。編譯器知道它的類型信息,能自動進(jìn)行內(nèi)存對齊、類型檢查等。
unsafe.Pointer是一種通用的無類型指針,可以轉(zhuǎn)換為任意類型的指針或從任意類型的指針轉(zhuǎn)換過來。編譯器不檢查其指向的類型和用法。

? 示例 1:不同類型指針轉(zhuǎn)換

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var x int = 100
	// 將 *int 轉(zhuǎn)換為 *float64(不安全!僅用于演示)
	p := unsafe.Pointer(&x)
	f := (*float64)(p) // 假裝 x 是 float64
	fmt.Println(*f)    // 輸出不確定,因為解釋方式不對
}

?這是錯誤用法,僅作為類型轉(zhuǎn)換的演示。實際運(yùn)行會出現(xiàn)亂碼或未定義行為。

? 示例 2:uintptr與unsafe.Pointer配合做地址偏移(字段偏移)

package main

import (
	"fmt"
	"unsafe"
)

type Person struct {
	age   int
	score float64
}

func main() {
	p := Person{age: 25, score: 98.5}
	// 獲取結(jié)構(gòu)體首地址
	ptr := unsafe.Pointer(&p)

	// 偏移到第二個字段(score)
	scorePtr := (*float64)(unsafe.Pointer(uintptr(ptr) + unsafe.Offsetof(p.score)))
	fmt.Println(*scorePtr) // 輸出:98.5
}

? 示例 3:修改字符串的只讀內(nèi)容(危險行為)

package main

import (
	"fmt"
	"reflect"
	"unsafe"
)

func main() {
	s := "hello"
	sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
	// 強(qiáng)轉(zhuǎn)為字節(jié)數(shù)組指針修改內(nèi)容
	b := (*[5]byte)(unsafe.Pointer(sh.Data))
	b[0] = 'H'
	fmt.Println(s) // 輸出 "Hello"
}

?這是標(biāo)準(zhǔn)庫明確禁止的行為,僅作教學(xué)展示。在某些平臺上可能 crash!

? 小結(jié)

場景是否安全推薦使用
類型間轉(zhuǎn)換(*T1 ? *T2)??
與 uintptr 搭配偏移操作??
直接操作底層數(shù)據(jù)(如字符串修改)??

到此這篇關(guān)于Go中unsafe.Pointer類型的使用小結(jié)的文章就介紹到這了,更多相關(guān)Go unsafe.Pointer類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解析go語言調(diào)用約定多返回值實現(xiàn)原理

    解析go語言調(diào)用約定多返回值實現(xiàn)原理

    這篇文章主要為大家介紹了解析go語言調(diào)用約定多返回值實現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Golang中的同步工具sync.Map示例詳解

    Golang中的同步工具sync.Map示例詳解

    sync.Map是Golang標(biāo)準(zhǔn)庫提供的并發(fā)安全的Map類型,可以在多個goroutine并發(fā)讀寫Map的場景下不需要加鎖,這篇文章主要介紹了Golang中的同步工具sync.Map詳解,需要的朋友可以參考下
    2023-05-05
  • Golang?官方依賴注入工具wire示例詳解

    Golang?官方依賴注入工具wire示例詳解

    這篇文章主要為大家介紹了Golang?官方依賴注入工具wire示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Go?指針、uintptr、unsafe.Pointer之間如何轉(zhuǎn)換

    Go?指針、uintptr、unsafe.Pointer之間如何轉(zhuǎn)換

    本文詳細(xì)介紹了Go語言中普通指針(*T)、uintptr和unsafe.Pointer的區(qū)別與轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • golang中的單引號轉(zhuǎn)義問題

    golang中的單引號轉(zhuǎn)義問題

    這篇文章主要介紹了golang中的單引號轉(zhuǎn)義問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • GoFrame錯誤處理常用方法及錯誤碼使用示例

    GoFrame錯誤處理常用方法及錯誤碼使用示例

    這篇文章主要為大家介紹了GoFrame錯誤處理常用方法及錯誤碼使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 一文帶你理解Go語言中方法的本質(zhì)

    一文帶你理解Go語言中方法的本質(zhì)

    我們知道,Go語言從設(shè)計伊始,就不支持經(jīng)典的面向?qū)ο笳Z法元素,但?Go?語言仍保留了名為“方法(method)”的語法元素,下面我們就來帶大家深入了解一下Go語言中的方法吧
    2023-11-11
  • GoFrame?gredis配置文件及配置方法對比

    GoFrame?gredis配置文件及配置方法對比

    這篇文章主要為大家介紹了GoFrame?gredis配置管理中,配置文件及配置方法對比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 詳解Go?flag實現(xiàn)二級子命令的方法

    詳解Go?flag實現(xiàn)二級子命令的方法

    這篇文章主要介紹了Go?flag?詳解,實現(xiàn)二級子命令,本文就探討一下?Go?語言中如何寫一個擁有類似特性的命令行程序,需要的朋友可以參考下
    2022-07-07
  • Golang使用ttl機(jī)制保存內(nèi)存數(shù)據(jù)方法詳解

    Golang使用ttl機(jī)制保存內(nèi)存數(shù)據(jù)方法詳解

    ttl(time-to-live) 數(shù)據(jù)存活時間,我們這里指數(shù)據(jù)在內(nèi)存中保存一段時間,超過期限則不能被讀取到,與Redis的ttl機(jī)制類似。本文僅實現(xiàn)ttl部分,不考慮序列化和反序列化
    2023-03-03

最新評論

大埔县| 乌鲁木齐县| 平泉县| 鹤岗市| 原平市| 凤冈县| 康马县| 花莲市| 静宁县| 阿巴嘎旗| 霍州市| 安平县| 五大连池市| 和顺县| 简阳市| 旌德县| 民勤县| 灌云县| 西峡县| 库尔勒市| 勐海县| 兴国县| 天等县| 浦北县| 蓝山县| 盐亭县| 新津县| 沅陵县| 庄河市| 普兰店市| 公主岭市| 常德市| 香河县| 依安县| 伊金霍洛旗| 林西县| 合山市| 吴堡县| 于田县| 社会| 栾城县|