我想定义一个返回接口切片的处理程序类型,类似于以下示例:package mainimport "fmt"type PersonInterface interface { GetName() string}type Person struct { Name string}func (person *Person) GetName() string { return person.Name}type PersonGetter func() []Personfunc 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但我不确定如何在此处应用它)。
1 回答

慕森王
TA贡献1777条经验 获得超3个赞
即使类型X实现了接口I,[]X也不能赋值给[]I。A[]X和[]I在结构上是不同的,[]X包含Xs 的切片,并[]I包含实际上是值对的接口切片,每个都指向底层数据和类型。
要执行您需要的操作,您需要更改函数声明以返回一片接口值:
func pg() []PersonInterface {
return []PersonInterface{&Person{Name: "John Doe"}}
}
- 1 回答
- 0 关注
- 107 浏览
添加回答
举报
0/150
提交
取消