Golang将接口文档字段转结构体的实践指南

Written by

in

文章目录
  • 近期使用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 %vn”, 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两种格式的字段。符合预期。 到此这篇关于Golang将接口文档字段转结构体的实践指南的文章就介绍到这了,更多相关Golang接口文档字段转结构体内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 一文详解下划线字段在golang结构体中的应用 Golang实现根据某个特定字段对结构体的顺序进行排序 golang中按照结构体的某个字段排序实例代码 golang 实现两个结构体复制字段 golang gorm 结构体的表字段缺省值设置方式
  • 目录
    • 问题提出
    • 实现思路和代码
    • 测试
    • 小结

    本文给出一个从接口文档字段说明文字转换成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 %vn", 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两种格式的字段。符合预期。

    到此这篇关于Golang将接口文档字段转结构体的实践指南的文章就介绍到这了,更多相关Golang接口文档字段转结构体内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • 一文详解下划线字段在golang结构体中的应用
    • Golang实现根据某个特定字段对结构体的顺序进行排序
    • golang中按照结构体的某个字段排序实例代码
    • golang 实现两个结构体复制字段
    • golang gorm 结构体的表字段缺省值设置方式

    站内搜索