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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

傳入任何結(jié)構(gòu)作為接口方法

傳入任何結(jié)構(gòu)作為接口方法

Go
qq_笑_17 2022-06-27 11:09:43
我正在嘗試創(chuàng)建一個(gè)接口,該接口具有將任何結(jié)構(gòu)作為輸入的方法。嘗試使用*interface但不工作。代碼:package mainimport (    "fmt")type Marshallable interface {    marshal() (*interface{}, error)}func Marshal(marshallable Marshallable) (error) {    fmt.Println(marshallable.marshal())    return nil}type Message1 struct {   message string}func (m *Message1) marshal() (m2 *Message2, err error) {    return nil, nil}type Message2 struct {   message string}func main(){   var m1 = Message1 {message: "Hello1"}   Marshal(m1)}它給出了編譯器錯(cuò)誤:./prog.go:31:11: cannot use m1 (type Message1) as type Marshallable in argument to Marshal:    Message1 does not implement Marshallable (wrong type for marshal method)        have marshal() (*Message2, error)        want marshal() (*interface {}, error)有什么辦法可以讓它工作嗎?
查看完整描述

2 回答

?
狐的傳說

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊

程序有幾個(gè)錯(cuò)誤:

  1. 不使用*interface{},使用interface{}。Aninterface{}可用于表示“任何”。

  2. 你的Message1結(jié)構(gòu)沒有實(shí)現(xiàn)Marshallable,因?yàn)樗环祷匾粋€(gè)interface{},它返回一個(gè)*Message2。Go 類型檢查是嚴(yán)格的,如果它想要一個(gè)interface{},你必須返回一個(gè)interface{}

  3. 由于Message1.marshal有一個(gè)指針接收器,你必須發(fā)送一個(gè)指向結(jié)構(gòu)的指針main

   Marshal(&m1)

這樣,您傳遞的接口將有一個(gè)指向m1而不是指向它的副本的指針。


查看完整回答
反對(duì) 回復(fù) 2022-06-27
?
明月笑刀無情

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


查看完整回答
反對(duì) 回復(fù) 2022-06-27
  • 2 回答
  • 0 關(guān)注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)