go 反射的基础应用

在golang中,反射是一种机制,它允许在程序运行时检查、探索和修改变量。
在反射中,我们可以使用 reflect 包的函数来读取变量的类型、值和方法。

package main
import (
 "fmt"
 "reflect"
)
type Person struct {
 Name string
 Age int
}
func main() {
 var fruit = []string{"apple", "banana", "orange"}
 var p = Person{Name: "John", Age: 30}
 fmt.Println("利用反射来获取变量的类型和对应的值:")
 fmt.Println("Type:", reflect.TypeOf(fruit))
 fmt.Println("Value:", reflect.ValueOf(fruit))
 fmt.Println("------------------------------")
 fmt.Println("利用反射来获取变量名称:")
 for i := 0; i < reflect.TypeOf(&p).Elem().NumField(); i++ {
 fmt.Println("变量名称: ", reflect.TypeOf(&p).Elem().Field(i).Name)
 }
 fmt.Println("------------------------------")
 fmt.Println("利用反射来修改结构体中属性的值:")
 v := reflect.ValueOf(&p).Elem()
 v.FieldByName("Name").SetString("lewis")
 v.FieldByName("Age").SetInt(20)
 fmt.Printf("Name: %s, Age: %d\n", p.Name, p.Age)
}

输出结果:

利用反射来获取变量的类型和对应的值:
Type: []string
Value: [apple banana orange]
------------------------------
利用反射来获取变量名称:
变量名称: Name
变量名称: Age
------------------------------
利用反射来修改结构体中属性的值:
Name: lewis, Age: 20

原文作者:蓝色瞳仁
版权声明:转载请注明作者和链接。

作者:赞原文地址:https://segmentfault.com/a/1190000043836791

%s 个评论

要回复文章请先登录注册