定义 returns 接口片段的函数类型

Defining a function type that returns a slice of interfaces

我想定义一个处理程序类型,其中 returns 接口的一部分,类似于以下示例:

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

我如何定义 returns 接口片段的通用函数类型? (我读过 https://github.com/golang/go/wiki/InterfaceSlice 但我不确定如何在此处应用它)。

即使类型 X 实现接口 I[]X 也不能分配给 []I[]X[]I 在结构上是不同的,[]X 包含一个 X 的切片,而 []I 包含一个实际上是值对的接口切片,每个都指向基础数据和类型。

为了满足您的需求,您需要将函数声明更改为 return 接口值的一部分:

func pg() []PersonInterface {
    return []PersonInterface{&Person{Name: "John Doe"}}
}