lundi 9 septembre 2019

How to dynamically call all methods of a struct in Golang?

I'm building a library where once methods are added to a struct we want them to be automatically called w/o using some sort of method list.

I want to build on the work here by calling all of the methods dumped that is linked here How to dump methods of structs in Golang?.

package main

import (
    "fmt"
    "reflect"
)

type Foo struct {
    Prop string
}

func (f Foo) Bar(i int) {
    fmt.Println("Called from Foo.Bar()")
}

func (f Foo) Baz(i int) {
    fmt.Println("Called from Foo.Baz()")
}

func (f Foo) Floop(i int) {
    fmt.Println("Called from Foo.Floop()")
}

func main() {
    fooType := reflect.TypeOf(&Foo{})

    fmt.Println("--- Calling methods ---")
    for i := 0; i < fooType.NumMethod(); i++ {
        method := fooType.Method(i)

        method.Func.Call(nil)
    }
}

Also seen here: https://play.golang.org/p/gNUsANjuPV0

This will always panic w/ a message for too few arguments to .Call(). I don't see where this differs structurally from the code here: https://play.golang.org/p/HB8yB91LRme.





Aucun commentaire:

Enregistrer un commentaire