遍历struct (遍历结构体)

Yishto 2021-08-20 21:46:24
Categories: Tags:

遍历结构体的指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func (this *VideoRecEntity) buildHttpQuery() string {
// 获取结构体实例的反射类型对象
t := reflect.TypeOf(this)
v := reflect.ValueOf(this)

paramsStr := ""
//.Elem() 取类型的元素
for k := 0; k < v.Elem().NumField(); k++ {
//fmt.Printf("%s -- %v \n", t.Filed(k).Name, v.Field(k).Interface())
paramsStr += fmt.Sprintf("%s=%s&", strings.ToLower(t.Elem().Field(k).Name), v.Elem().Field(k))
}
return strings.Trim(paramsStr, "&")
}

Go语言程序中对指针获取反射对象时,可以通过 reflect.Elem() 方法获取这个指针指向的元素类型。这个获取过程被称为取元素,等效于对指针类型变量做了一个*操作,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
import (
"fmt"
"reflect"
)
func main() {
// 声明一个空结构体
type cat struct {
}
// 创建cat的实例
ins := &cat{}
// 获取结构体实例的反射类型对象
typeOfCat := reflect.TypeOf(ins)
// 显示反射类型对象的名称和种类
fmt.Printf("name:'%v' kind:'%v'\n",typeOfCat.Name(), typeOfCat.Kind())
// 取类型的元素
typeOfCat = typeOfCat.Elem()
// 显示反射类型对象的名称和种类
fmt.Printf("element name: '%v', element kind: '%v'\n", typeOfCat.Name(), typeOfCat.Kind())
}

代码输出如下:

1
2
3
name: ''  kind: 'ptr'
element name: 'cat', element kind: 'struct'

代码说明如下: