2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
&b
=> 這是應(yīng)用于變量的地址運(yùn)算符b
,其類型為interface{}
。所以&b
將是一個(gè)類型的指針*interface{}
,指向變量b
。如果您獲取類型變量的地址T
,則結(jié)果將始終為類型*T
。
a
您無法從獲取變量的地址b
,因?yàn)橘x值:
b?=?a
只需將 的值復(fù)制a
到 中b
。它將 的值包裝a
在類型為 的接口值中interface{}
,并將該接口值存儲到 中b
。該值與a
.
通常,所有賦值都復(fù)制被賦值的值。Go 中沒有引用類型。最接近您想要的是,如果您首先存儲a
in的地址,例如:b
b?=?&a
然后你可以使用類型斷言來獲取 outa
的地址,b
如下所示:
fmt.Printf("%T,?%T?\n",?a,?&a) fmt.Printf("%T,?%T?\n",?b,?b.(*int))
此輸出(在Go Playground上嘗試):
int,?*int *int,?*int
(注意:當(dāng)你簡單地 print 時(shí)b
,因?yàn)樗且粋€(gè)接口類型,fmt
包打印它包裝的(具體)值。)

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果您不知道接口中存儲的值的類型(因此,您不能顯式使用類型斷言),您可以使用反射包:
var a int
var b interface{}
b = &a
fmt.Println(reflect.TypeOf(b))
- 2 回答
- 0 關(guān)注
- 166 瀏覽
添加回答
舉報(bào)