Struct 结构初始化以满足没有显式方法定义的接口
给定以下伪go代码:Struct 结构初始化以满足没有显式方法定义的接口,struct,interface,go,Struct,Interface,Go,给定以下伪go代码: type( MyStruct struct { AFunction func(string) ([]byte, error) } MyInterface interface { AFunction(string) ([]byte, error) } ) func NeedThis(s string) ([]byte, error){ //relevant function stuff } m :
type(
MyStruct struct {
AFunction func(string) ([]byte, error)
}
MyInterface interface {
AFunction(string) ([]byte, error)
}
)
func NeedThis(s string) ([]byte, error){
//relevant function stuff
}
m := &MyStruct{AFunction: NeedThis}
问题是m不满足MyInterface;我可以理解为什么会这样。有没有一种方法可以将函数附加到结构上,使构造的结构满足接口,而不在结构上实际构建定义方法?我对此有一些模糊/错误的推理,也许可以帮助我澄清这一点,或者展示一种更好的方式来通过这种情况进行推理 您是否可以在
MyStruct
上定义一个方法a函数
,将其分派给存储的a函数
函数指针?如果你有很多这样的东西,那就不太理想了,但我认为它能起作用吗
i、 例如
func (s MyStruct) AFunction(str string) ([]byte, error) {
return s.AFunction(str)
}
编辑:上述操作可能会导致编译器出错,因为
s.affunction
不明确,因此您可能必须为它们(方法和函数指针)指定不同的名称,但应该给出正确的想法。您可以将其包装在实现接口的另一个结构中:
你能更好地解释一下你要解决的问题吗?你看,这是不可能的,所以我不知道该怎么回答。我正在做一些事情,用一件事情来扩展另一件可能提供或不提供资产的事情,你可以看到它是如何在这里结束的:是的,这是我需要做的
package main
import "fmt"
type (
MyStruct struct {
AFunction func(string) ([]byte, error)
}
MyInterface interface {
AFunction(string) ([]byte, error)
}
)
func NeedThis(s string) ([]byte, error) {
//relevant function stuff
return nil, nil
}
type Proxy struct {
*MyStruct
}
func (x *Proxy) AFunction(s string) ([]byte, error) {
return x.MyStruct.AFunction(s)
}
func main() {
m := &MyStruct{AFunction: NeedThis}
p := &Proxy{m}
_, ok := MyInterface(p).(MyInterface)
fmt.Println(ok)
}