给出下面的伪代码:
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接口;我可以在某种程度上看到为什么会如此。有没有办法将函数附加到结构,使得构造的结构满足接口而不实际构建结构上的定义方法?我对此有一些阴暗/错误的推理,也许有助于为我澄清这一点或显示更好的方法来推理这种情况。
答案 0 :(得分:0)
你能不能在AFunction
上定义一个调度到存储的MyStruct
函数指针的方法AFunction
?如果你有很多这样的东西,这是不理想的,但我认为它能做到这一点?
即。
之类的东西func (s MyStruct) AFunction(str string) ([]byte, error) {
return s.AFunction(str)
}
编辑:上面的代码可能会导致编译器出错,因为s.AFunction
是不明确的,所以你可能不得不给它们(方法和函数指针)不同的名字,但它应该给出正确的想法。
答案 1 :(得分:0)
您可以将其包装在另一个实现接口的结构中:
http://play.golang.org/p/AgnYAWBdUp
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)
}