定义 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"}}
}
我想定义一个处理程序类型,其中 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"}}
}