定义返回接口切片的函数类型

我想定义一个返回接口切片的处理程序类型,类似于以下示例:


package main


import "fmt"


type PersonInterface interface {

    GetName() string

}


type Person struct {

    Name string

}


func (person *Person) GetName() string {

    return person.Name

}


type PersonGetter func() []Person


func pg() []*Person {

    return []*Person{&Person{Name: "John Doe"}}

}


func main() {

    var person PersonInterface

    person = &Person{"John Doe"}

    fmt.Println(person)


    var personGetter PersonGetter

    personGetter = pg

}

但是,如果我运行它,我会得到


cannot use pg (type func() []*Person) as type PersonGetter in assignment

我将如何定义一个返回接口切片的通用函数类型?(我已阅读https://github.com/golang/go/wiki/InterfaceSlice但我不确定如何在此处应用它)。


守着星空守着你
浏览 108回答 1
1回答

慕森王

即使类型X实现了接口I,[]X也不能赋值给[]I。A[]X和[]I在结构上是不同的,[]X包含Xs 的切片,并[]I包含实际上是值对的接口切片,每个都指向底层数据和类型。要执行您需要的操作,您需要更改函数声明以返回一片接口值:func pg() []PersonInterface {    return []PersonInterface{&Person{Name: "John Doe"}}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go