Golang 中结构体的转储方法
虽然 Golang 的“fmt”包提供了“Printf”方法来转储结构体的属性,但有一个需要检索结构体的属性和方法。考虑以下示例:
type Foo struct { Prop string } func (f Foo)Bar() string { return f.Prop }
要检查“Foo”类型的初始化实例中是否存在“Bar()”方法,请考虑使用“reflect”包。您可以这样做:
fooType := reflect.TypeOf(&Foo{}) for i := 0; i < fooType.NumMethod(); i++ { method := fooType.Method(i) fmt.Println(method.Name) }
如果您的目标是确定类型是否实现特定方法集,则接口和类型断言可能会更方便。示例:
func implementsBar(v interface{}) bool { type Barer interface { Bar() string } _, ok := v.(Barer) return ok }
要测试“Bar()”方法的“Foo”实例:
fmt.Println("Foo implements the Bar method:", implementsBar(Foo{}))
或者,显式断言某个类型具有某些方法编译时间:
var _ Barer = Foo{}
以上是如何转储 Go 结构体的属性和方法?的详细内容。更多信息请关注PHP中文网其他相关文章!