我有一個接口,其中一個方法返回另一個接口的一部分。這是一個簡單的表示: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)
}
- 1 回答
- 0 關注
- 151 瀏覽
添加回答
舉報
0/150
提交
取消