既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- 使用反射对象获取类型或值的信息。
- 根据需要修改值。
示例:反射读取和设置值
让我们通过一个示例来展示如何使用反射读取和设置结构体的字段值。我们将定义一个简单的结构体,并使用反射来动态地读取和修改它的字段。
定义结构体
首先,定义一个简单的结构体Person
:
type Person struct {
Name string
Age int
}
使用反射读取字段值
然后,编写一个函数来使用反射读取Person
结构体实例的字段值:
package main
import (
"fmt"
"reflect"
)
func printFields(person interface{}) {
val := reflect.ValueOf(person)
for i := 0; i < val.NumField(); i++ {
field := val.Type().Field(i)
value := val.Field(i)
fmt.Printf("%s: %v\n", field.Name, value.Interface())
}
}
使用反射设置字段值
接下来,编写一个函数来使用反射设置Person
结构体实例的字段值:
func setAge(person interface{}, newAge int) {
val := reflect.ValueOf(person).Elem()
ageField := val.FieldByName("Age")
if ageField.IsValid() && ageField.CanSet() {
ageField.SetInt(int64(newAge))
}
}
包含主函数的完整代码
最后,编写主函数来演示如何使用上述函数:
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func printFields(person interface{}) {
val := reflect.ValueOf(person)
for i := 0; i < val.NumField(); i++ {
field := val.Type().Field(i)
value := val.Field(i)
fmt.Printf("%s: %v\n", field.Name, value.Interface())
}
}
![img](https://img-blog.csdnimg.cn/img_convert/a6771745b93ee05bc293a6a3bcc75da7.png)
![img](https://img-blog.csdnimg.cn/img_convert/296db0999cf472dc1a880bf624c73cb2.png)
![img](https://img-blog.csdnimg.cn/img_convert/1551e6a3f18f40f2ac2b7407156992e0.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**