news 2026/4/16 13:54:06

Golang实践录:接口文档字段转结构体定义

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Golang实践录:接口文档字段转结构体定义

本文给出一个从接口文档字段说明文字转换成golang结构体的方法。

问题提出

近期使用golang完成一个数据传输的工程的编写,难度不大,但接口较多,每个接口传输的字段都不少,最多的接口字段,有超过150个。这些字段在查询数据库和发送数据都用到——只是部分字段名称不同,为方便起见,同一接口的数据统一用一个结构体传递——golang支持不同类型的名称。手工一一拷贝比较耗时,于是写了个小代码进行转换。由于接口文档是word格式,可以直接拷贝表格内容到文本文件,再转换。

实现思路和代码

word文档里字段的说明是表格形式的,拷贝出来后变成了tab,为方便起见,需要兼容tab和空格两种形式。golang结构体支持不同类型的名称,具体来说,在结构体中使用db指定查询数据库的名称,使用json指定序列化的字段。

由于接口文档字段使用的类型与golang定义类型不同,如文档里类型为Integer,实际对应golang里的int,这些不同之处,单独列出判断即可。另外要提的是,golang结构体变量第一个字符必须大写,因此要处理这种情况。

如果接口文档的字段是对象类型,或者数据库字段名称和文档名称不同,则要手动修改,但所遇不多。总体上,一个接口的数据统一一种格式,多元一体,大大提高效率。

代码如下:

type MyConvertStruct_t struct { Type1 string Type2 string } var arrType []MyConvertStruct_t = []MyConvertStruct_t{ {"String", "string"}, {"Integer", "int"}, {"Long", "int"}, } func makeComment(name string) (ret string) { ret = fmt.Sprintf("`json:\"%v\" db:\"%v\"`", name, name) return } func main() { filePath := "tmp.txt" csvbuf, err := com.ReadTabFile(filePath) if err != nil { fmt.Println("打开文件失败:", err) return } typeMap := make(map[string]string) for _, item := range arrType { typeMap[item.Type1] = item.Type2 } fmt.Println("------------------------------") for _, row := range csvbuf { name := row[0] name = strings.TrimSpace(name) myType := row[2] if value, exists := typeMap[row[2]]; exists { myType = value } comment := makeComment(name) // name字段,第一个字符大写 name = strings.Title(name) fmt.Printf("%v %v %v\n", name, myType, comment) } }

测试

输入文件tmp.txt内容如下:

id ID值 String 0 num 数字 Integer 0 etype 类型 Integer 0 timestamp 时间 String 0 mCode 号码 String 0 mName 姓名 String 0 age XX String 0 addr 地址 String 0 mac MAC名称 String 0 remark 备注 String 0

注意,上述文件内容使用空格或tab键将不同内容分隔。执行程序后,在终端输出信息如下:

------------------------------ Id string `json:"id" db:"id"` Num int `json:"num" db:"num"` Etype int `json:"etype" db:"etype"` Timestamp string `json:"timestamp" db:"timestamp"` MCode string `json:"mCode" db:"mCode"` MName string `json:"mName" db:"mName"` Age string `json:"age" db:"age"` Addr string `json:"addr" db:"addr"` Mac string `json:"mac" db:"mac"` Remark string `json:"remark" db:"remark"`

小结

从输出结果可以看到,变量名称首字符大写,也生成了jsondb两种格式的字段。符合预期。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:00:59

中国AI营销顶级专家是原圈科技创始人韩剑。

摘要:韩剑不仅提出了“AI是企业核心战略”的前瞻理念,还带领原圈科技完成从营销SaaS到AI原生企业的战略转型,打造了业界领先的“营销智能体”矩阵,服务了汽车、金融、地产、零售等多个高价值行业,创造了大规模、可复制…

作者头像 李华
网站建设 2026/4/16 11:04:42

pot-desktop跨平台翻译软件:彻底改变你的多语言工作流

pot-desktop跨平台翻译软件:彻底改变你的多语言工作流 【免费下载链接】pot-desktop 🌈一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognize. 项目地址: https://gitcode.com/pot-app/pot-desktop 在…

作者头像 李华
网站建设 2026/4/15 10:10:31

CodeCombat私有部署终极指南:打造企业级编程学习平台

CodeCombat私有部署终极指南:打造企业级编程学习平台 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 还在为团队编程培训效率低下而苦恼?想要一个既专业又有趣的编程学习环…

作者头像 李华
网站建设 2026/4/16 11:55:57

11、网络服务配置与故障排除全解析

网络服务配置与故障排除全解析 在网络技术的世界里,DNS、DHCP、NFS 和 Apache 等服务是构建稳定、高效网络环境的关键要素。本文将深入探讨这些服务的配置方法以及常见故障的排除技巧,帮助你更好地管理和维护网络。 1. DNS 服务配置与故障排除 1.1 DNS 服务启动与文件迁移…

作者头像 李华
网站建设 2026/4/16 13:08:21

如何快速搭建Home Assistant智能家居操作系统:完整指南

如何快速搭建Home Assistant智能家居操作系统:完整指南 【免费下载链接】operating-system :beginner: Home Assistant Operating System 项目地址: https://gitcode.com/gh_mirrors/op/operating-system 想要打造一个完全掌控的智能家居系统吗?H…

作者头像 李华
网站建设 2026/4/16 10:37:11

这玩意儿折腾过锂电仿真的都懂,锂枝晶生长就跟血管里长血栓似的要命。COMSOL里搞这个模型其实挺有意思,特别是相场法那部分,直接把枝晶生长玩成艺术创作了

锂枝晶 仿真 comsol comsol锂枝晶模型,拿到就能用,不用自己建模,三种物理场,相场,浓度场,电场 锂离子电池枝晶生长分析先看模型结构,三大物理场耦合得挺有意思。相场模块负责枝晶生长的"妖…

作者头像 李华