go

¿Cómo volcar métodos de estructuras en Golang?



(1)

Puede enumerar los métodos de un tipo usando el paquete reflect. Por ejemplo:

fooType := reflect.TypeOf(Foo{}) for i := 0; i < fooType.NumMethod(); i++ { method := fooType.Method(i) fmt.Println(method.Name) }

Puedes jugar con esto aquí: http://play.golang.org/p/wNuwVJM6vr

Teniendo esto en cuenta, si desea comprobar si un tipo implementa un determinado conjunto de métodos, puede que le resulte más fácil utilizar interfaces y una aserción de tipo. Por ejemplo:

func implementsBar(v interface{}) bool { type Barer interface { Bar() string } _, ok := v.(Barer) return ok } ... fmt.Println("Foo implements the Bar method:", implementsBar(Foo{}))

O si solo desea lo que equivale a una afirmación de tiempo de compilación de que un tipo particular tiene los métodos, simplemente podría incluir lo siguiente en alguna parte:

var _ Barer = Foo{}

El paquete Golang " fmt " tiene un método de volcado llamado Printf("%+v", anyStruct) . Estoy buscando cualquier método para volcar una estructura y sus métodos también .

Por ejemplo:

type Foo struct { Prop string } func (f Foo)Bar() string { return f.Prop }

Quiero verificar la existencia del método Bar() en una instancia inicializada de tipo Foo (no solo propiedades).

¿Hay alguna buena manera de hacer esto?