php小编草莓在编程开发中,我们经常会使用Gorm对象进行数据库操作。而有时候,我们需要从Gorm对象中获取列名称和对应的值。那么,如何实现这个需求呢?在Gorm中,我们可以通过反射来获取对象的属性和值,并结合Gorm的标签来获取列名称。接下来,我将为大家详细介绍如何从Gorm对象中获取列名称和值的方法。让我们一起来看看吧!
我想编写一个函数,它可以获取从数据库加载的任何对象(通过 gorm)并打印出所有列名称和值。显然,关键部分是将我的任何 Gorm 模型传递到此函数中的能力。我没有在下面展示这些,因为它们都很简单。
到目前为止,我拥有的是一个带有接口的函数,以及一些调用它的测试代码:
func testfunc(s interface{}) { // type v := reflect.TypeOf(s) fmt.Println(v) // fields? for i := 0; i < v.NumField(); i++ { fmt.Println(i) } }
trans := make([]orm.Trans, 0) db.Where("state = ?", state.FINISHED).Limit(1).Find(&trans) testfunc(trans)
运行时,会打印出类型,然后出现恐慌:
[]orm.Trans panic: reflect: call of reflect.Value.NumField on slice Value
我是个新手,所以欢迎你的想法。看来我可能的选择是:
谢谢。
尝试这种方法:
func testfunc(x interface{}){ v := reflect.ValueOf(x) s := reflect.TypeOf(x) names:=make([]interface{},v.NumField()) values := make([]interface{}, v.NumField()) for i := 0; i < v.NumField(); i++ { values[i] = v.Field(i).Interface() names[i] = s.Field(i).Name } fmt.Println("Names",names) fmt.Println("values",values) }
1-您正在传递结构体切片。(如果使用切片,请避免在循环中调用上面的函数。)
2-我正在将此结构传递给上面的函数
x := struct { Name string Id int }{"Zargham", 2}
3-获取输出:-
Names [Name Id] values [Zargham 2]
以上是如何从 Gorm 对象获取列名称和值?的详细内容。更多信息请关注PHP中文网其他相关文章!