为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕慕森 2023-07-26 17:03:47
我有一个接口,其中一个方法返回另一个接口的一部分。这是一个简单的表示: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)

}


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信