Dumping Methods of Structs in Golang
While Golang's "fmt" package provides a "Printf" method to dump a struct's properties, there's a need to retrieve both properties and methods of a struct. Consider the following example:
type Foo struct { Prop string } func (f Foo)Bar() string { return f.Prop }
To check the existence of the "Bar()" method in an initialized instance of type "Foo," consider using the "reflect" package. This is how you would do it:
fooType := reflect.TypeOf(&Foo{}) for i := 0; i < fooType.NumMethod(); i++ { method := fooType.Method(i) fmt.Println(method.Name) }
If your goal is to determine if a type implements a specific method set, interfaces and type assertions might be more convenient. An example:
func implementsBar(v interface{}) bool { type Barer interface { Bar() string } _, ok := v.(Barer) return ok }
To test an instance of "Foo" for the "Bar()" method:
fmt.Println("Foo implements the Bar method:", implementsBar(Foo{}))
Alternatively, to explicitly assert that a type has certain methods at compile time:
var _ Barer = Foo{}
The above is the detailed content of How Can I Dump Both Properties and Methods of a Go Struct?. For more information, please follow other related articles on the PHP Chinese website!