当前位置: 首页 > 面试题库 >

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

袁弘化
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 我知道如何在同一包中的结构中嵌入其他结构,但是如何在其他包的结构中嵌入结构? dog.go main.go 当我运行main.go时,它告诉我一个错误: 问题答案: @simon_xia是正确的,看来您 可能 对Go有点陌生。 首先,欢迎来到社区!! 现在,请扩展一下他的评论… Go并未提供成员/方法的公共/私有范围,而是具有Exporting的概念。因此,如果要允许从另一个包访问方法

  • 问题内容: 我想将一个结构转换为Golang中的地图。如果我可以在创建的地图中使用JSON标签作为键(否则默认为字段名称),那也将很好。 编码愉快!:) 原始帖子 到目前为止,我具有此功能,我正在使用反射包,但我不太了解如何使用该包,请多多包涵。 我也查看了JSON包的源代码,因为它应该包含我所需的实现(或部分实现),但理解得并不多。 问题答案: 我也需要这样的东西。我正在使用将结构转换为地图的内

  • Go 语言中的结构体和 C 语言中结构体一样,都是用来保存一组 不同类型的数据 Go 语言中的结构体和 C 语言中结构体一样,都需要先定义结构体类型再利用结构体类型定义结构体变量 定义结构体类型 type 类型名称 struct{ 属性名称 属性类型 属性名称 属性类型 ... ... } type Studentstruct { name string age int

  • 编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 我有一个Json: 我不知道如何将元帅行星字段解构到map[string]int中,所以我可以访问元素而无需像这个例子中那样取消marshade:json来映射Golang 代码如下: fmt.Println(user.Planets.Planet[“地球])-返回 fmt.Println(user.Pl

  • 问题内容: 可以在Golang中定义一个不变的结构吗?一旦初始化,则只能对struct的字段进行读取操作,而无需修改字段值。如果是这样,该怎么做。 问题答案: 通过使其成员不导出并提供阅读器,可以在其程序包外部将结构设为只读。例如: 和用法:

  • 本文向大家介绍golang修改结构体中的切片值方法,包括了golang修改结构体中的切片值方法的使用技巧和注意事项,需要的朋友参考一下 golang修改结构体中的切片值,直接传结构体地址就可以 到此这篇关于golang修改结构体中的切片值方法的文章就介绍到这了,更多相关golang 修改结构体切片值内容请搜索呐喊教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持呐喊教程!