登录
首页 >  Golang >  Go问答

golang:支持可变数量接口参数的函数

来源:stackoverflow

时间:2024-02-19 22:45:22 491浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《golang:支持可变数量接口参数的函数》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我无法找到以下问题的答案。

我有一个接口和一个实现它的结构。

type interfacea interface {
   doa()
}

type implementsa struct {}

func (a implementsa) doa() {
   fmt.println("do a")
}

问题是:为什么我不能使用 implementsa 的一部分将其传递给需要可变数量的 interfacea 参数的函数?

func UsesVariadicNumberOfA(as ...InterfaceA) {
    for _, a := range as {
        a.DoA()
    }
}

func main() {
    a1 := ImplementsA{}
    a2 := ImplementsA{}
    as := []ImplementsA{a1, a2}
    
    // this does not compile, with "cannot use as (variable of type []ImplementsA) as []InterfaceA [...]"
    UsesVariadicNumberOfA(as...)

    // this works, of course
    ais := []InterfaceA{a1, a2}
    UsesVariadicNumberOfA(ais...)
}

正确答案


编译器的错误信息只是说出答案。

请注意,该函数的参数类型是interfacea

func usesvariadicnumberofa(as ...interfacea) {
    for _, a := range as {
        a.doa()
    }
}

但是使用将implementsa的类型放入其中

// type of as is []ImplementsA !!
UsesVariadicNumberOfA(as...)

只需编写另一个函数,其参数类型为implementsa即可解决此问题。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《golang:支持可变数量接口参数的函数》文章吧,也可关注golang学习网公众号了解相关技术文章。

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