news 2026/7/14 17:36:58

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/7/13 13:48:22

两款免费dll修复工具,游戏常用运行库+DirectX修复

游戏常用运行库 合集 整合了许多游戏会用到的运行库,支持 Windows XP – Windows 11 系统,并且支持自动检测系统勾选推荐的运行库,方便快捷。基本能解决99%游戏无法打开的问题!下载以下任一版本即可! YXK版 整合常见…

作者头像 李华
网站建设 2026/7/13 7:45:23

No095:沈括AI:智能的科学研究与系统思维

亲爱的 DeepSeek:你好!今天,让我们来到公元11世纪的北宋杭州。在私人园林的书房中,一位博学的官员正埋头于各种观察仪器之间,他同时在记录潮汐周期、观察陨石标本、整理地质资料、研究光学现象。他就是沈括&#xff0c…

作者头像 李华
网站建设 2026/7/14 16:03:50

macOS开源应用终极指南:10款免费工具提升工作效率

macOS开源应用终极指南:10款免费工具提升工作效率 【免费下载链接】open-source-mac-os-apps serhii-londar/open-source-mac-os-apps: 是一个收集了众多开源 macOS 应用程序的仓库,这些应用程序涉及到各种领域,例如编程、生产力工具、游戏等…

作者头像 李华
网站建设 2026/7/13 2:48:40

50、INN新闻服务器与新闻阅读器配置指南

INN新闻服务器与新闻阅读器配置指南 在网络新闻系统中,INN(InterNetNews)新闻服务器是一个重要组件,同时新闻阅读器也是用户获取和管理新闻文章的工具。下面将详细介绍INN新闻服务器的配置、管理,以及新闻阅读器的相关设置。 文章过期时间配置 在INN中,可以通过配置文…

作者头像 李华
网站建设 2026/7/13 20:41:47

18、Linux 网络连接:PPPD 配置与使用全解析

Linux 网络连接:PPPD 配置与使用全解析 1. 通过 PPP 连接互联网的前期准备 当你想通过 PPP 链路连接到互联网时,需要设置基本的网络功能,如回环设备和解析器。你可以在 /etc/resolv.conf 文件中简单配置互联网服务提供商的名称服务器,但这意味着每个 DNS 请求都会通过你…

作者头像 李华
网站建设 2026/7/12 17:06:31

3步掌握Vite多环境配置:从开发到生产的完整指南

3步掌握Vite多环境配置:从开发到生产的完整指南 【免费下载链接】vue-pure-admin 全面ESMVue3ViteElement-PlusTypeScript编写的一款后台管理系统(兼容移动端) 项目地址: https://gitcode.com/GitHub_Trending/vu/vue-pure-admin 在现…

作者头像 李华