我有一个接口,其中一个方法返回另一个接口的一部分。这是一个简单的表示:
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 的有效实现?
慕码人8056858
相关分类