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

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两种格式的字段。符合预期。

http://www.cnnetsun.cn/news/104112.html

相关文章:

  • 别瞎挖了!弱口令挖掘就这 3 招(1 字典 + 2 技巧),月入 5K 稳
  • 语音合成也能‘演戏’?EmotiVoice演绎悲伤与喜悦
  • 计算机专业,一定要考取这六个证书,手握一个薪资起码翻一倍,含金量高!从零基础到精通,收藏这篇就够了!
  • 如何快速上手YOLO目标检测:智能可视化工具完整教程
  • SlopeCraft:重新定义Minecraft地图画创作边界
  • EmotiVoice vs 传统TTS:情感表达能力全面超越
  • 快速掌握Java反编译:JD-GUI终极使用指南
  • ImageViewer终极跨平台图片浏览解决方案
  • 4、深入探索 Linux:文件系统、进程管理与内存管理全解析
  • 7、Linux 实用工具与网络配置全解析
  • UIParticle终极指南:轻松为Unity UI添加炫酷粒子特效
  • IndexTTS2终极指南:零样本语音合成的革命性突破
  • AI写的论文查重率真的很高吗?2025年实测数据与破解之道
  • GSE插件完整教程:魔兽世界宏编辑新手指南
  • 《30天速通软硬件开发:企业人必备的跨界知识地图,降低70%沟通成本》(上篇)
  • 《35岁及以上码农破局指南方法论及落地方案》
  • 研发费用加计扣除、高新技术企业中的归集范围有哪些?
  • Nintendo Switch 文件解析终极指南:NSTool 完整使用教程
  • 新榜智汇 GEO 搜索优化软件:全域品牌追踪,GEO 策略精准提效
  • 29、深入理解内存管理与动态内存分配
  • AI语音也能传情达意?EmotiVoice带你进入情感合成世界
  • 为什么这款本地语音转文字工具是隐私敏感用户的终极选择?
  • OpenVidu视频会议平台:从零开始的完整部署与实战指南
  • 毕设分享 YOLOv8工地安全监控预警系统(源码+论文)
  • SpringBoot 中 6 种数据脱敏方案,第 5 种太强了,支持深度递归!
  • pdf2svg:终极PDF到SVG转换工具完整指南
  • 视频水印移除工具使用指南
  • **AI漫剧一站式生成2025推荐,零基础创作者也能快速上手
  • 掌握3大核心场景:NVIDIA显卡设置工具深度应用指南
  • 19、C语言中的内存模型与指针操作详解