gpt4 book ai didi

go - 如何让一个接口(interface)方法返回另一个接口(interface)?

转载 作者:行者123 更新时间:2023-12-01 22:44:49 25 4
gpt4 key购买 nike

我有一个接口(interface),其中一个方法返回另一个接口(interface)的一部分。这是一个简单的表示:

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 接口(interface),这我理解,但没想到,因为 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

我在这里做错了什么?

评论后编辑

我尝试将方法更改为只返回一辆汽车,以避免围绕接口(interface) slice 的问题,但它仍然提示。只是为了我想了解发生了什么。由于 MyCar实现 Car我没想到会出现以下错误:
*mygarage.MyGarage does not implement Garage (wrong type for GetCar method)
have GetCar() mygarage.MyCar
want GetCar() Car

我认为问题在于强类型返回类型,MyCar 不是 Car,但应该可以将其强制转换为一个,但 Go 不接受它作为接口(interface) Garage 的有效实现?

最佳答案

这与不是接口(interface)的接口(interface) slice 有关,也就是说,我认为下面的内容可以满足您的需求。

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)
}

关于go - 如何让一个接口(interface)方法返回另一个接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58129958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com