gpt4 book ai didi

go - 如何列出指向golang struct所有字段的指针?

转载 作者:数据小太阳 更新时间:2023-10-29 03:39:50 26 4
gpt4 key购买 nike

在golang中有没有一个很好的方法来传递一些结构实例c的所有字段?

我正在寻找一些语法糖功能,而不是这样做:

method(&c.field1, &c.field2, &c.field3, &c.field4, &c.field5, ...)

我可以这样做:

method(FieldsPointers(c)...)

我是 golang 的新手,仍在学习基础知识,如果没有好的方法可以出于充分的理由做我想做的事情,我将不胜感激解释原因。

最佳答案

除了所有sql指定的工具,如果你想访问一个结构的指针,你可以使用reflect。请注意,这个包裹很棘手,rob pike 说它并不适合所有人。

reflect.Value 有方法 NumField 返回结构中字段的数量和 Field(int) 接受一个索引字段并返回字段本身。

但是因为要给它赋值,所以比只调用这两个方法要复杂。让我用代码告诉你:

func Scan(x interface{}) {
v := reflect.ValueOf(x).Elem()
for i := 0; i < v.NumField(); i++ {
switch f := v.Field(i); f.Kind() {
case reflect.Int:
nv := 37
f.Set(reflect.ValueOf(nv))
case reflect.Bool:
nv := true
f.Set(reflect.ValueOf(nv))
}
}
}

首先,您需要将结构指针传递给Scan,因为您正在修改数据并且该值必须是可设置的。这就是我们调用 .Elem() 以取消引用指针的原因。

其次,reflect.Value.Set 必须使用相同的类型来设置。您不能像正常赋值那样将 uint32 设置为 int64

Playground :https://play.golang.org/p/grvXAc1Px8g

关于go - 如何列出指向golang struct所有字段的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48663141/

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