什么是Golang相当于Ruby的"方法"方法?

use*_*268 1 ruby reflection methods go

我正在玩Golang,我想知道是否有一种方法可以列出我可以在变量上使用的所有方法或属性.在Ruby中,我可以简单地使用some_variable.methods来获取所有定义的方法some_variable.Golang有类似的东西吗?

Not*_*fer 6

是的你可以.通过反射,每个reflect.Type对象都可以枚举实际类型公开的所有方法.但是在Go中这不是一个非常普遍或惯用的事情:

import (
    "fmt"
    "reflect"
)

type Foo struct {
}

func (f Foo) Bar() {
}

func (f Foo) Baz() {
}

func main() {

    t := reflect.TypeOf(Foo{})
    for i := 0; i < t.NumMethod(); i++ {
        fmt.Println(t.Method(i).Name)
    }
}
// Output:
// Bar
// Baz
Run Code Online (Sandbox Code Playgroud)

这也可以reflect.Value根据您的需要进行.

但真正的问题是 - 你想在这里实现什么?您是否尝试检查类型是否实现了接口或类似的东西?您的目标可能有一个更简单的解决方案.你的实际目标是什么?

  • @ user130268标准库的文档是一个更好的解决方案恕我直言:) (4认同)