作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
Golang "fmt"包有一个转储方法,称为 Printf("%+v", anyStruct)
。我正在寻找任何方法来转储结构及其方法。
例如:
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)
}
你可以在这里玩这个: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/21397653/
我已经在 jQuery transit 中加载了,我确定我是在加载 jQuery 之后才做的,但我仍然得到这个错误: 我查看了 Chrome 中的资源面板,在 jQuery 之后加载了 jQuery
我目前收到一个字符串,例如 Hello there my\r\nName is\r\nJohn Smith\r\nand\r\nstuff 我想将每一行放在一个新列表项...例如: 期望的结果(带有单
我正在尝试使用 MapKit 路线请求获取两个坐标之间的交通路线。 当我切换到其他(非 Transit)类型时,下面的代码可以工作,但是当我切换到 Transit 时,它会抛出一个错误,这个错误在 A
我是一名优秀的程序员,十分优秀!