考虑以下结构:
type Foo struct{}
func (f *Foo) foo() {
fmt.Println("Hello")
}
使用反射,我想生成一个覆盖一组方法的自定义结构类型。 手动进行工作时,我想做的是:
type Edit struct{
Foo
}
func (e *Edit) foo() {
e.Foo.foo()
fmt.Println("World")
}
但是我不想创建一个函数,它可以对任何给定的结构自动进行此类覆盖。
我知道我可以使用以下方法实例化一个结构:
res := reflect.New(reflect.TypeOf(origin))
但是在这种情况下,我们无法编辑方法。
那么,如何通过反射创建一个结构类型,该结构类型可以像上面说明的那样包装现有类型?
答案 0 :(得分:0)
您可以实现与使用Method Values所要求的极其相似的东西。您可以执行以下操作:
package main
import (
"fmt"
)
type Foo struct {
sayHelloAgain func()
}
func (f *Foo) SayHello() {
fmt.Print("Hello,")
f.sayHelloAgain()
}
func main() {
edit := struct{Foo}{}
edit.sayHelloAgain = func(){ fmt.Println(" World!") }
edit.SayHello()
}
如您所见,您可以创建一个匿名结构,该结构将能够调用SayHello
函数,然后该函数将调用接收者的动态设置sayHelloAgain
方法。
我认为这将是您最接近目标的方法,并且可以按您的要求工作(无需relection
)