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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取接口內值的地址

獲取接口內值的地址

Go
繁星點點滴滴 2021-06-05 09:04:26
如何獲取接口內值的地址?我有一個存儲在接口中的結構體,在一個 list.List 元素中:import "container/list"type retry struct{}p := &el.Value.(retry)但我明白了:cannot take the address of el.Value.(retry)這是怎么回事?既然結構體存儲在接口中,為什么我不能得到指向它的指針呢?
查看完整描述

3 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

要理解為什么這是不可能的,考慮一下接口變量實際上是什么是有幫助的。一個接口值占用兩個詞,第一個描述所包含值的類型,第二個或者 (a) 保存所包含的值(如果它適合這個詞)或 (b) 一個指向存儲值的指針(如果該值不適合一個單詞)。


需要注意的重要事項是 (1) 包含的值屬于接口變量,以及 (2) 在為變量分配新值時,該值的存儲可能會被重用。知道了這一點,請考慮以下代碼:


var v interface{}

v = int(42)

p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42

v = &SomeStruct{...}

現(xiàn)在整數(shù)的存儲已被重新用于保存指針,*p現(xiàn)在是該指針的整數(shù)表示。你可以看到它是如何有能力打破類型系統(tǒng)的,所以 Go 沒有提供一種方法來做到這一點(除了使用unsafe包之外)。


如果您需要一個指向存儲在列表中的結構的指針,那么一種選擇是將指向列表中的結構的指針而不是直接存儲結構值。或者,您可以將*list.Element值作為對所包含結構的引用傳遞。


查看完整回答
反對 回復 2021-06-07
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

在第一個近似值中:你不能那樣做。即使你可以,p它本身也必須有類型interface{}并且不會有太大幫助 - 你不能直接取消引用它。

強制性問題是:你想解決什么問題?

最后但并非最不重要的一點:接口定義行為而不是結構。直接使用接口的底層實現(xiàn)類型通常會破壞接口契約,盡管可能存在非一般的合法情況。但是,對于一組有限的靜態(tài)已知類型,類型 switch 語句已經提供了這些。


查看完整回答
反對 回復 2021-06-07
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

獲取指向接口值的指針?


給定接口類型的變量,有沒有辦法獲取指向存儲在變量中的值的指針?


這不可能。


羅伯·派克


接口值不一定是可尋址的。例如,


package main


import "fmt"


func main() {

    var i interface{}

    i = 42

    // cannot take the address of i.(int)

    j := &i.(int)

    fmt.Println(i, j)

}

地址運算符


對于 T 類型的操作數(shù) x,地址操作 &x 生成一個類型為 *T 的指針,指向 x。操作數(shù)必須是可尋址的,即變量、指針間接或切片索引操作;或可尋址結構操作數(shù)的字段選擇器;或可尋址數(shù)組的數(shù)組索引操作。作為可尋址性要求的一個例外,x 也可以是復合文字。


查看完整回答
反對 回復 2021-06-07
  • 3 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號