第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何獲取接口的指針

如何獲取接口的指針

Go
慕妹3146593 2022-04-26 10:51:13
很難解釋,但是我怎樣才能得到一個(gè)實(shí)現(xiàn)某個(gè)接口的東西的指針呢?考慮下面的代碼:package mainimport (    "fmt"    "unsafe")type Interface interface {    Example()}type StructThatImplementsInterface struct {}func (i *StructThatImplementsInterface) Example() {}type StructThatHasInterface struct {    i Interface}func main() {    sameInterface := &StructThatImplementsInterface{}    struct1 := StructThatHasInterface{i: sameInterface}    struct2 := StructThatHasInterface{i: sameInterface}    TheProblemIsHere(&struct1)    TheProblemIsHere(&struct2)}func TheProblemIsHere(s *StructThatHasInterface) {    fmt.Printf("Pointer by Printf: %p \n", s.i)    fmt.Printf("Pointer by Usafe: %v \n", unsafe.Pointer(&s.i))}https://play.golang.org/p/HoC5_BBeswA結(jié)果將是:Pointer by Printf: 0x40c138 Pointer by Usafe: 0x40c140 Pointer by Printf: 0x40c138 Pointer by Usafe: 0x40c148 請(qǐng)注意,Printf獲得相同的值(因?yàn)閮烧叨糞tructThatHasInterface使用相同的sameInterface)。但是,unsafe.Pointer()返回不同的值。如果可能的話,我怎樣才能得到與Printfwithout use相同的結(jié)果?fmtreflect
查看完整描述

1 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

在當(dāng)前版本的 Go 中,一個(gè)接口值是兩個(gè)字長(zhǎng)。具體值或指向具體值的指針存儲(chǔ)在第二個(gè)字中。使用以下代碼將第二個(gè)單詞作為 a uintptr

  u := (*[2]uintptr)(unsafe.Pointer(&s.i))[1]

此代碼不安全,不保證將來(lái)可以正常工作。

獲取指針的支持方式是:

  u := reflect.ValueOf(s.i).Pointer()


查看完整回答
反對(duì) 回復(fù) 2022-04-26
  • 1 回答
  • 0 關(guān)注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)