go 反射应用

简介: go 反射应用实例

项目场景:

要对数个数据库表中的数据进行加密/解密,需针对每个数据表建立结构体,针对不同的结构体写不同的解密方法,此过程十分繁琐,但必不可少。


# 解决方案: 通过使用反射,对结构体进行动态的获取属性,修改属性等操作可大大减少代码量。 ```go package decode import ( "DecodeService/util" "fmt" "reflect" "strconv" "strings" ) const tag = "json" func DeCommon(o interface{}) { // 获取类型 t := reflect.TypeOf(o) // 因为传入的是指针所以需要这步 t = t.Elem() // 获取值 v := reflect.ValueOf(o) // 因为传入的是指针所以需要这步 v = v.Elem() // 可以获取所有属性 // 获取结构体字段个数:t.NumField() for i := 0; i < t.NumField(); i++ { // 取每个不为空的字段 if !v.Field(i).IsZero() { f := t.Field(i) tag := f.Tag.Get(tag) fv := v.Field(i).String() if strings.HasPrefix(tag, "enc") && fv != "0" { fmt.Println("- decode - ", fv) var plaintext string plaintext = util.DecodeEDE3WithKey(fv) tagName := "de" + tag[3:] setValue(o, tagName, plaintext) } } } } // 可以运行 func setValue(o interface{}, tagName, plaintext string) { v := reflect.ValueOf(o) v = v.Elem() t := reflect.TypeOf(o) t = t.Elem() var f reflect.Value for i := 0; i < t.NumField(); i++ { if t.Field(i).Tag.Get("json") == tagName { f = v.Field(i) } } if !f.IsValid() { fmt.Println("ERROR : Not find field that tag is ", tagName) } if f.Kind() == reflect.String { f.SetString(plaintext) } if f.Kind() == reflect.Int { i, err := strconv.Atoi(plaintext) if err != nil { fmt.Println(err) } f.SetInt(int64(i)) } } ```
相关文章
|
22天前
|
安全 Go
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
|
22天前
|
存储 缓存 安全
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
|
1月前
|
存储 监控 安全
Go语言在身份认证与访问控制中的应用
【2月更文挑战第24天】随着信息技术的快速发展,身份认证与访问控制成为了保障系统安全的关键环节。Go语言作为一种高效、简洁且强大的编程语言,在身份认证与访问控制领域展现出了独特的优势。本文将探讨Go语言在身份认证、权限管理以及访问控制策略实施等方面的应用,并分析其在提升系统安全性方面的潜力。
|
1月前
|
存储 安全 算法
Go语言在数据加密与保护中的应用
【2月更文挑战第24天】Go语言以其高效的性能、简洁的语法和强大的标准库,在数据加密与保护领域获得了广泛的应用。本文详细探讨了Go语言在数据加密、数据脱敏、访问控制以及安全通信等方面的应用,并分析了Go语言在数据加密与保护方面的优势与未来趋势。
213 49
|
1月前
|
运维 Java Go
Go语言基础及其在容器化应用中的优势
【2月更文挑战第23天】本文首先介绍了Go语言的基本特性和优势,然后详细阐述了Go语言在容器化应用中的重要作用和独特优势。通过深入分析Go语言的语法简洁性、并发处理能力和内存管理特性,以及Docker容器技术的轻量级、可移植性和版本控制特点,本文旨在说明Go语言与Docker容器技术的结合能够显著提升应用的开发效率和部署灵活性,为现代软件开发和运维带来革命性的变革。
|
1月前
|
存储 消息中间件 大数据
Go语言在大数据处理中的实际应用与案例分析
【2月更文挑战第22天】本文深入探讨了Go语言在大数据处理中的实际应用,通过案例分析展示了Go语言在处理大数据时的优势和实践效果。文章首先介绍了大数据处理的挑战与需求,然后详细分析了Go语言在大数据处理中的适用性和核心技术,最后通过具体案例展示了Go语言在大数据处理中的实际应用。
|
1月前
|
安全 大数据 Go
Go语言在分布式系统中的应用
【2月更文挑战第20天】Go语言,以其独特的语言特性和出色的性能,逐渐成为分布式系统开发领域的热门选择。本文将深入探讨Go语言在分布式系统中的应用,分析其优势及实际应用案例,旨在为开发人员提供有价值的参考与启示。
|
1月前
|
网络协议 Go 开发者
Go语言网络编程基础:构建高效、可靠的网络应用
【2月更文挑战第12天】本文将深入探讨Go语言在网络编程领域的基础知识,包括其强大的并发模型、网络库的使用、TCP/IP和HTTP协议的理解等。通过本文,读者将能够理解Go语言在网络编程中的优势,并掌握构建高效、可靠网络应用的核心技能。
|
1月前
|
数据采集 监控 安全
Go语言在网络安全中的应用
【2月更文挑战第24天】Go语言,作为一种高效且易于维护的编程语言,近年来在网络安全领域得到了广泛的应用。本文旨在探讨Go语言在网络安全中的应用,包括其在防火墙、入侵检测、网络爬虫以及Web安全等方面的应用,并分析了Go语言在网络安全领域的优势与前景。
|
6天前
|
Kubernetes Cloud Native Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(下)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
40 0