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

【Go】通过反射解析对象tag信息,实现简易ORM

反射是运行时,需要在运行时解析类型信息,编译期无法优化这些操作,因此比编译时已知类型信息的直接调用效率要低。

package mainimport ("fmt""reflect""strings"
)type Person struct {Name string `json:"name" gorm:"column:name"`Age  int    `json:"age" gorm:"column:age"`
}func Parse(p interface{}) {tp := reflect.TypeOf(p)tv := reflect.ValueOf(p)if tp.Kind() == reflect.Pointer {tp = tp.Elem()tv = tv.Elem()}for i := 0; i < tp.NumField(); i++ {field := tp.Field(i)name := field.Namevalue := tv.FieldByName(name).Interface()var column stringtag := field.Tag.Get("gorm")parts := strings.Split(tag, ":")if len(parts) == 2 {column = parts[1]}fmt.Printf("变量名:%s 值:%v 数据库字段名:%s\n", name, value, column)}
}func main() {p0 := &Person{Name: "Jackie",Age:  20,}Parse(p0)p1 := Person{Name: "Avalanche",Age:  30,}Parse(p1)
}

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • llama factory 训练 TensorBoard 可视化
  • 【C++】——Vector的模拟实现
  • Golang | Leetcode Golang题解之第324题摆动排序II
  • mysql如何储存大量数据,分库存分表的建议和看法
  • gbd的概念与常用指令
  • 【Linux基础】Linux基本指令(一)
  • 小米教你:2GB内存搞定20亿数据的高效算法
  • 【C++】vector 的模拟实现
  • 从0开始的算法(数据结构和算法)基础(七)
  • Unity Addressables bundle依赖查看和资源重复查看工具
  • linux 多进程搭建webserver
  • MinGW-w64编译安装Acise
  • 维吉尼亚密码加解密实现(python)
  • Android 12系统源码_多屏幕(一)多屏幕设备显示Activity
  • 超声波眼镜清洗机哪个性价比高?2024推荐四款清洁力高的超声波清洗机
  • Akka系列(七):Actor持久化之Akka persistence
  • Computed property XXX was assigned to but it has no setter
  • cookie和session
  • Docker: 容器互访的三种方式
  • extract-text-webpack-plugin用法
  • JAVA之继承和多态
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • SpringBoot几种定时任务的实现方式
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 检测对象或数组
  • 人脸识别最新开发经验demo
  • 深度学习中的信息论知识详解
  • 时间复杂度与空间复杂度分析
  • 一些css基础学习笔记
  • 运行时添加log4j2的appender
  • C# - 为值类型重定义相等性
  • !!Dom4j 学习笔记
  • # 透过事物看本质的能力怎么培养?
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $.ajax中的eval及dataType
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (26)4.7 字符函数和字符串函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (二)windows配置JDK环境
  • (回溯) LeetCode 77. 组合
  • (十八)Flink CEP 详解
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)nsfocus-绿盟科技笔试题目