1 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
如錯(cuò)誤所述,您的類(lèi)型轉(zhuǎn)換無(wú)效。從文檔中:unsafe.Pointer
任何類(lèi)型的指針值都可以轉(zhuǎn)換為指針。
指針可以轉(zhuǎn)換為任何類(lèi)型的指針值。
可以將 uintptr 轉(zhuǎn)換為指針。
指針可以轉(zhuǎn)換為 uintptr。
請(qǐng)注意,“指針”(大寫(xiě))是指,而“指針值”是指常規(guī)的 Go 指針,如unsafe.Pointer
*int
Go有嚴(yán)格的類(lèi)型系統(tǒng),因此您需要檢查您正在使用的內(nèi)容的適當(dāng)類(lèi)型,并注意類(lèi)型錯(cuò)誤。
嘗試從給定內(nèi)存地址加載值的代碼的正確版本是這樣的:
package main
import (
"fmt"
"unsafe"
)
func main() {
loc := uintptr(0xc0000140f0)
p := unsafe.Pointer(loc)
var val int = *((*int)(p))
fmt.Println("Location : ", loc, " Val :", val)
}
如標(biāo)題所示,您還希望存儲(chǔ)一個(gè)值,如下所示:
*((*int)(p)) = 1234
現(xiàn)在,如果您想維護(hù)該指針以繼續(xù)使用它,則可以將其存儲(chǔ)為常規(guī)的Go指針:
var pointer *int = (*int)(p)
val := *pointer // load something
*pointer = 456 // store something
當(dāng)然,這里的使用完全是武斷的。您可以使用任何類(lèi)型,這將確定“值”在此上下文中的含義。int
- 1 回答
- 0 關(guān)注
- 109 瀏覽
添加回答
舉報(bào)