我有一个接口,其中一个方法返回另一个接口的一部分。这是一个简单的表示: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 关注
- 101 浏览
添加回答
举报
0/150
提交
取消