¿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?