如何让一个接口方法返回另一个接口?

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


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 的有效实现?


慕慕森
浏览 157回答 1
1回答

慕码人8056858

这与接口片段不是接口有关,话虽如此,我认为下面的内容给了你你想要的。https://play.golang.org/p/qg0NQNCIjx7type 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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go