加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 19:22:54 所属栏目:大数据 来源:网络整理
导读:Golang“fmt”包有转储方法Printf(“%v”,anyStruct). 我正在寻找任何方法来转储结构也倾销其方法.如 type Foo struct { Prop string}func (f Foo)Bar() string { return f.Prop} 我想检查(不仅属性)存在“Bar”方法初始化的类型为“Foo”的实例. 有没有什
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

考虑到这一点,如果要检查类型是否实现某个方法集,则可能会发现使用接口和类型断言更为容易.例如:

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{}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读