2026/6/10 22:33:14
网站建设
项目流程
东莞专业网站设计建站,乐陵属于山东哪个市,徐州建站方案,虚拟主机的作用本文给出一个从接口文档字段说明文字转换成golang结构体的方法。问题提出
近期使用golang完成一个数据传输的工程的编写#xff0c;难度不大#xff0c;但接口较多#xff0c;每个接口传输的字段都不少#xff0c;最多的接口字段#xff0c;有超过150个。这些字段在查询数…本文给出一个从接口文档字段说明文字转换成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小结从输出结果可以看到变量名称首字符大写也生成了json和db两种格式的字段。符合预期。