当前位置: 首页 > news >正文

golang反射

https://www.bilibili.com/video/BV1gf4y1r79E?p=23

reflect包

  1. 反射的作用:在运行时检查数据的类型和值
  2. 核心函数
    • reflect.TypeOf:获取一个值的类型
    • reflect.ValueOf:获取它的值
    • reflect.New:创建一个指向该类型的新指针。也就是说,为传入的类型分配内存,并返回一个指向该内存的指针的反射值。
  3. 读取结构体字段,field就是成员变量
type User struct {Name string `json:"name"`Age  int    `json:"age"`
}func inspectStruct(u User) {t := reflect.TypeOf(u)for i := 0; i < t.NumField(); i++ {field := t.Field(i)fmt.Printf("Field: %s, Tag: %s\n", field.Name, field.Tag.Get("json"))}
}
  1. 动态调用函数
func Add(a, b int) int {return a + b
}func main() {funcValue := reflect.ValueOf(Add)args := []reflect.Value{reflect.ValueOf(3), reflect.ValueOf(4)}results := funcValue.Call(args)fmt.Println(results[0].Int()) // 输出: 7
}
  1. 修改值
func modifyValue(x interface{}) {v := reflect.ValueOf(x)// Elem()是获取指针指向的值,CanSet方法则检查该Value是否可以被修改if v.Kind() == reflect.Ptr && v.Elem().CanSet() {v.Elem().SetInt(100)}
}func main() {var x int = 42modifyValue(&x)fmt.Println(x) // 输出: 100
}

反射用处

  1. ​通用库开发:如 JSON 序列化/反序列化(encoding/json)、ORM 框架等。
  2. ​动态类型处理:需要根据类型名称或字段动态处理数据。
  3. ​插件化系统:动态加载模块并调用方法。
  4. ​测试工具:自动化测试中动态调用函数。

http://www.mrgr.cn/news/93318.html

相关文章:

  • RabbitMQ 2025/3/5
  • sqli-lab靶场学习(七)——Less23-25(关键字被过滤、二次注入)
  • 基于Matlab的多目标粒子群优化
  • c++ 纯虚函数
  • c++ 接口/多态
  • 国内支持Stable Diffusion模型的平台
  • CSS—属性继承与预处理器:2分钟掌握预处理器
  • 机器学习--特征选择
  • 自然语言模型(NLP)介绍
  • 鬼泣:项目前置设置杂项
  • 【零基础C语言】第四节 数组
  • QT5 GPU使用
  • vLLM代码推理Qwen2-VL多模态大模型(远程服务器解决方案,无需UI)
  • 机器学习数学基础:40.结构方程模型(SEM)中卡方值与卡方自由度比
  • 人工智能神经网络基本原理
  • cursor使用经验分享(java后端服务开发向)
  • Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echarts助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)
  • 启智平台华为昇腾910B 运行DeepSeek Janus-Pro-7/1B
  • Dify 开源大语言模型应用开发平台使用(一)
  • 【Oracle学习笔记】1.数据库组成对象