2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
程序有幾個(gè)錯(cuò)誤:
不使用
*interface{}
,使用interface{}
。Aninterface{}
可用于表示“任何”。你的
Message1
結(jié)構(gòu)沒有實(shí)現(xiàn)Marshallable
,因?yàn)樗环祷匾粋€(gè)interface{}
,它返回一個(gè)*Message2
。Go 類型檢查是嚴(yán)格的,如果它想要一個(gè)interface{}
,你必須返回一個(gè)interface{}
由于
Message1.marshal
有一個(gè)指針接收器,你必須發(fā)送一個(gè)指向結(jié)構(gòu)的指針main
:
Marshal(&m1)
這樣,您傳遞的接口將有一個(gè)指向m1
而不是指向它的副本的指針。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的代碼根本不起作用,因?yàn)橄⒌木幗M方法具有類型指針的接收器,并且您傳遞的是結(jié)構(gòu),而不是指針。所以你需要在函數(shù)調(diào)用中傳遞 &m1 。
在接收器和返回類型中使用 ptr
https://play.golang.org/p/jVOVsdPTPcm
沒有指針 (*)
https://play.golang.org/p/_LS6o-y4f6l
帶指針
https://play.golang.org/p/P-2eWtYMDaf
- 2 回答
- 0 關(guān)注
- 116 瀏覽
添加回答
舉報(bào)