登录
首页 >  Golang >  Go问答

如何在切片中实现不同的功能但共享相同的接口

来源:stackoverflow

时间:2024-03-06 13:03:19 279浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《如何在切片中实现不同的功能但共享相同的接口》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我尝试附加可以用同一接口表示的不同函数。 函数返回不同的对象但相同的接口。 它失败并出现错误 cannot use test (value of type func() *dog) as func() animal value in argument to append (typecheck) 我应该怎么办?提前致谢!

package main

type Dog struct {
    Word string
}

type Cat struct {
    Word string
}

func (d *Dog) Say() string {
    return d.Word
}

func (c *Cat) Say() string {
    return c.Word
}

type Animal interface {
    Say() string
}

func main() {
    funcs := []func() Animal{}
    funcs = append(funcs, Test)  // error| cannot use Test (value of type func() *Dog) as func() Animal value in argument to append (typecheck)
}

func Test() *Dog {
    return &Dog{Word: "dog"}
}

func Test2() *Cat {
    return &Cat{Word: "cat"}
}


解决方案


更改您的函数以将 Animal 作为其返回类型。 func() *Dog 不能转换为 func() Animal,它们是两种不同的数据类型。

类似于如何将 int 作为 interface{} 传递,但不将 []int 作为 []interface{}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何在切片中实现不同的功能但共享相同的接口》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>