我试图让 Go 接口工作,我遇到的问题是,只有在实现声明接口而不是实现接口的具体类型时,返回 go接口的 Go接口方法才有效。
在以下示例中,我收到:
prog.go:29: 不能在打印机参数中使用 &f (type *Bar) 作为 StringerGetter 类型:*Bar 没有实现 StringerGetter(GetStringer 方法的类型错误)有 GetStringer() *Foo 想要 GetStringer() fmt.Stringer
package main
import "fmt"
type Foo struct {
val string
}
func (f *Foo) String() string {
return f.val
}
type StringerGetter interface {
GetStringer() fmt.Stringer
}
type Bar struct{}
func (b *Bar) GetStringer() *Foo {
return &Foo{"foo"}
}
func Printer(s StringerGetter) {
fmt.Println(s.GetStringer())
}
func main() {
f := Bar{}
Printer(&f)
}
但是,如果我更改func (b *Bar) GetStringer() *Foo {为func (b *Bar) GetStringer() fmt.Stringer {它会按预期工作。
Foo 确实满足 fmt.Stringer
问题在于上面是说明问题的简单示例代码。
在我尝试编写的代码的情况下,我创建的接口在我的"main"包中,而我正在编写接口的具体类型在我不想修改的第 3 方包中。
我也希望能够编写自己的结构来实现上述接口,因此与具体返回类型进行接口也不是一种选择。
我必须假设有一种方法可以做到这一点。
三国纷争
一只甜甜圈
慕丝7291255
相关分类