下面是Go通过反射机制读取结构体信息的例子
package main
import (
"fmt"
"reflect"
)
// 定义一个结构体
type Person struct {
Name string
Age int
}
func main() {
// 创建一个Person类型的实例
person := Person{Name: "Tizi365", Age: 30}
// 获取person变量的类型信息
personType := reflect.TypeOf(person)
// 获取person变量的值信息
personValue := reflect.ValueOf(person)
// 遍历person变量的结构体字段
for i := 0; i < personType.NumField(); i++ {
// 获取字段的类型信息
fieldType := personType.Field(i)
// 获取字段的值信息
fieldValue := personValue.Field(i)
// 输出字段名称和值
fmt.Printf("%s: %v\n", fieldType.Name, fieldValue)
}
}
输出结果
Name: Tizi365
Age: 30
下面是通过反射机制调用函数的例子
package main
import (
"fmt"
"reflect"
)
func main() {
// 定义一个函数
func1 := func(a int, b int) int {
return a + b
}
//获取函数的反射类型
funcVal := reflect.ValueOf(func1)
//创建一个切片来存储函数参数
params := make([]reflect.Value, 2)
params[0] = reflect.ValueOf(10)
params[1] = reflect.ValueOf(20)
//通过Call函数来调用函数
result := funcVal.Call(params)
//结果是一个切片,需要取第一个元素
fmt.Println(result[0].Int()) //30
}