亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何讓一個接口方法返回另一個接口?

如何讓一個接口方法返回另一個接口?

Go
慕慕森 2023-07-26 17:03:47
我有一個接口,其中一個方法返回另一個接口的一部分。這是一個簡單的表示:type Garage interface {    AllCars() []Car}type Car interface {    Name() string}我也為此做了一個實現:type MyGarage struct{}func (g MyGarage) AllCars() []MyCar {    return make([]MyCar, 0)}type MyCar struct {    name string}func (c MyCar) Name() string {    return c.name}現在在我的測試中我做了一個函數:func TestAllCars(t *testing.T) {    var garage Garage    garage = new(mygarage.MyGarage)    cars := garage.AllCars()    fmt.Println(cars)}Go 抱怨 MyGarage 沒有實現 Garage 接口,這是我理解的,但沒想到,因為 MyCar 確實實現了 Car,所以這對我來說不應該是一個問題。cannot use new(mygarage.MyGarage) (type *mygarage.MyGarage) as type Garage in assignment:    *mygarage.MyGarage does not implement Garage (wrong type for AllCars method)        have AllCars() []mygarage.MyCar        want AllCars() []Car我在這里做錯了什么?評論后編輯我嘗試更改方法以僅返回一輛車,以避免界面切片周圍的問題,但它仍然抱怨。只是為了我想了解發生了什么事。由于MyCar實現了Car我沒想到會出現以下錯誤:*mygarage.MyGarage does not implement Garage (wrong type for GetCar method)    have GetCar() mygarage.MyCar    want GetCar() Car我認為問題在于強類型返回類型,MyCar 不是 Car,但應該可以將其轉換為 Car,但 Go 不接受它作為接口 Garage 的有效實現?
查看完整描述

1 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

這與接口片段不是接口有關,話雖如此,我認為下面的內容給了你你想要的。

https://play.golang.org/p/qg0NQNCIjx7

type Garage interface {

    AllCars() []Car

}


type Car interface {

    Name() string

}


type MyGarage struct{


}


func (g MyGarage) AllCars() []Car {

    x := []Car{MyCar{}}

    return x

}


type MyCar struct {

    name string

}


func (c MyCar) Name() string {

    return c.name

}


func main() {

    var garage Garage

    garage = MyGarage{}

    cars := garage.AllCars()

    fmt.Println(cars)

}


查看完整回答
反對 回復 2023-07-26
  • 1 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號