2014-09-19 75 views
1

給定一個接口,我該如何獲取指向底層值的指針?Go從接口獲取指向結構的指針?

我天真的嘗試是使用類型聲明是這樣的:

var mytypeptr *MyType = myinterface.(*MyType) 

,但我得到:

interface conversion: MyInterface is MyType, not *MyType 
+0

我想你想把'* MyType'放在'interface'中,這裏是第一個地方。接口值內部包含的指針已經超過機器字長度的任何類型;當你存儲一個'* MyType'([這裏是粗糙的測試代碼來演示](http://play.golang.org/p/3Y3QKTmSW8))時,編譯器足夠聰明,不會產生指針指針。和'.'對於指針類型的行爲與實際結構相同。 – twotwotwo 2014-09-19 19:44:43

回答

0

你可以下手,使用reflect.Indirect()

val := reflect.ValueOf(myinterface) 
if val.Kind() == reflect.Ptr { 
    val = reflect.Indirect(val) 
} 
+0

有沒有辦法修改接口後面的struct字段而不訴諸反映? – erjoalgo 2014-09-19 17:08:53

+0

@erjoalgo考慮接口的結構(請參閱http://stackoverflow.com/a/23148998/6309),否:在運行時,接口會掩蓋基礎值。接口是靜態類型的(http://stackoverflow.com/a/23724093/6309) – VonC 2014-09-19 17:09:59