2 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
該函數(shù)返回類型Car
和Bus
寫(xiě)入的值。如果您希望輸入的變量main
具有特定類型,請(qǐng)使用類型斷言:
c := makeInstance("Car").(Car)
如果您的目標(biāo)是獲取指向這些類型值的指針,則返回指針makeInstance
:
func makeInstance(name string) interface{} { return reflect.New(typeRegistry[name]).Interface() }

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
您可能應(yīng)該停下來(lái)閱讀有關(guān)接口值類型斷言的內(nèi)容。Go 不是一種動(dòng)態(tài)類型的語(yǔ)言,您嘗試做的事情很可能會(huì)失敗:
只要您在與您一起工作,interface{}
您就無(wú)法在不進(jìn)行反射的情況下訪問(wèn)這些字段(制造商、型號(hào)、座位、路線...)。如果你想寫(xiě)x.Make
你必須有一個(gè)x
類型Car
或*Car
(而不是接口{})。
要從c
of 類型interface{}
變?yōu)槔?a,Car
您必須鍵入 assert:
var car Car = c.(Car)
請(qǐng)注意,您不能進(jìn)行動(dòng)態(tài)類型斷言(沒(méi)有反射),c.(Car)
如果 c 包含例如 a ,那將會(huì)失敗Bus
。因此,在 json.Unmarshaling 到通用接口{}之后,您將必須打開(kāi)已知類型并斷言該類型。這意味著您無(wú)論如何都要為每種類型編寫(xiě)專用代碼。
- 2 回答
- 0 關(guān)注
- 152 瀏覽
添加回答
舉報(bào)