Yaml转Golang结构体的小工具
最近离职了,在家写点代码,发现Yaml文件转Go的结构体的工具好少,我又比较习惯使用Yaml作为配置文件。
早写晚写都得写,就趁早封装一个吧。
先在网上找找看,发现一个库还挺不错:yaml2go
再看看他的cli,我希望集成在我的Makefile里,可以基于Yaml文件快速的重新生成go结构体文件
结果,他的cli版本是这样的:
原库cli代码

这里有几个问题:
- 1.基于i/o,不能定制化参数
- 2.输出的文件内,没有包名等,不满足我的要求,也没法改
- 3.无法通过go install 快速安装,因为这里的代码和yaml2go的源码是在一起的
- 4.生成的根结点结构体名称必须为Yaml2Go,这个说实话有点太呆了
所以就自己封装一个吧。
用cobra加一个root入口,加几个定制化的参数:
- 输入文件路径
- 输出文件路径
- 根结构体名
- 生成文件的包名

我封装的工具源码在这里
使用方式也很简单:
./yaml2go-cli -i test/test.yaml -o test/test.bean.file
原始的Yaml文件:
port: 8080
log:
level: debug
path: log
db:
path: db
name: map
生成出的Golang结构体文件:
package main
// Default
type Default struct {
Log Log `yaml:"log"`
Db Db `yaml:"db"`
Port int `yaml:"port"`
}
// Log
type Log struct {
Level string `yaml:"level"`
Path string `yaml:"path"`
}
// Db
type Db struct {
Path string `yaml:"path"`
Name string `yaml:"name"`
}
当然,你也可以使用-p 包名指定包名,-s 结构体名指定根结构体名称。
挺方便的,这样就可以在自己的Makefile上集成一个make yaml命令,使用yaml文件生成go文件,免去手敲的麻烦:
yaml:
go install github.com/Icemap/yaml2go-cli@latest
yaml2go-cli -i config/config.yaml -o config/config.bean.go -p config -s Config
Done