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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不同返回值實現(xiàn)同一個接口的接口轉(zhuǎn)換

不同返回值實現(xiàn)同一個接口的接口轉(zhuǎn)換

Go
慕森卡 2022-01-17 16:15:11
我正在嘗試編寫一個涉及模擬幾個結(jié)構(gòu)的測試,其中一個結(jié)構(gòu)的函數(shù)返回另一個結(jié)構(gòu)的實例。但是,我遇到了可以使用以下代碼重現(xiàn)的問題:package maintype Machine1 interface {    Produce() Material1}type Machine2 interface {    Produce() Material2}type Material1 interface {    Use() error}type Material2 interface {    Use() error}type PencilMachine struct{}func (pm *PencilMachine) Produce() Material1 {    return &Pencil{}}type Pencil struct{}func (p *Pencil) Use() error {    return nil}func main() {    pm := new(PencilMachine)    var m1 Machine1    m1 = Machine1(pm)    var m2 Machine2    m2 = Machine2(m1)    _ = m2}這給出了以下錯誤:prog.go:38: cannot convert m1 (type Machine1) to type Machine2:    Machine1 does not implement Machine2 (wrong type for Produce method)        have Produce() Material1        want Produce() Material2請注意 Pencil 結(jié)構(gòu)如何實現(xiàn) Material1 和 Material2 接口。但是 (pm *PencilMachine) Produce() 的返回類型是 Material1 而不是 Material2。很好奇為什么這不起作用,因為任何實現(xiàn) Material1 的東西也實現(xiàn)了 Material2。謝謝!https://play.golang.org/p/3D2jsSLoI0
查看完整描述

2 回答

?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗 獲得超13個贊

將接口更多地視為合同。它們不會僅僅因為它們不直接實現(xiàn)任何東西而隱式實現(xiàn)其他接口。


接口由實現(xiàn)滿足。(希望這是有道理的)


在您的示例中,兩種機器類型都可以創(chuàng)建簡單的“材料”,如下所示: https: //play.golang.org/p/ZoYJog2Xri


package main


type Machine1 interface {

    Produce() Material

}


type Machine2 interface {

    Produce() Material

}


type Material interface {

    Use() error

}


type PencilMachine struct{}


func (pm *PencilMachine) Produce() Material {

    return &Pencil{}

}


type Pencil struct{}


func (p *Pencil) Use() error {

    return nil

}


func main() {

    pm := new(PencilMachine)


    var m1 Machine1

    m1 = Machine1(pm)


    var m2 Machine2

    m2 = Machine2(m1)


    _ = m2

}


查看完整回答
反對 回復(fù) 2022-01-17
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊

這是因為您的鉛筆機沒有實現(xiàn) Machine2 接口。這是罪魁禍?zhǔn)祝?/p>


func (pm *PencilMachine) Produce() Material1 {

    return &Pencil{}

}

您會看到,盡管 PencilMachine 具有相同的功能Produce,但它不會返回相同的數(shù)據(jù)類型(Material1),因此它僅實現(xiàn) Machine1。Machine2 需要一個Produce函數(shù)來返回 Material2


查看完整回答
反對 回復(fù) 2022-01-17
  • 2 回答
  • 0 關(guān)注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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