gpt4 book ai didi

go - 如何在 Golang 中转储结构的方法?

转载 作者:行者123 更新时间:2023-12-01 22:24:57 25 4
gpt4 key购买 nike

Golang 的“fmt”包有一个名为 Printf("%+v", anyStruct) 的转储方法。 .我也在寻找任何方法来转储结构及其方法。

例如:

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

我想检查 Bar() 是否存在 Foo 类型的初始化实例中的方法(不仅是属性)。

有什么好的方法可以做到这一点吗?

最佳答案

您可以使用 reflect 列出类型的方法。包裹。例如:

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

你可以在这里玩这个: http://play.golang.org/p/wNuwVJM6vr

考虑到这一点,如果你想检查一个类型是否实现了某个方法集,你可能会发现使用接口(interface)和类型断言更容易。例如:
func implementsBar(v interface{}) bool {
type Barer interface {
Bar() string
}
_, ok := v.(Barer)
return ok
}

...
fmt.Println("Foo implements the Bar method:", implementsBar(Foo{}))

或者,如果您只是想要一个特定类型具有方法的编译时断言,您可以简单地在某处包含以下内容:
var _ Barer = Foo{}

关于go - 如何在 Golang 中转储结构的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60571159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com