golang flag and config
ddatsh
flag欠缺的
与命令行Parser的事实标准:Posix getopt(C/C++/Perl/Shell脚本都可用)相比,还有较大差距
- 无法区分 long option 和 short option,如:-h 和 –help
- 不支持short options合并,如:ls -l -h <=> ls -hl
- 位置不能任意放置,如无法放在 non-flag parameter 后面
一个良好的应用配置层次
- 程序内置初始默认值
- 配置文件的配置项值可覆盖(override)程序内置默认值
- 命令行选项和参数值具有最高优先级,可以override前两层的值
TOML,Go配置文件的事实标准(可能不能得到认同)
Java 配 xml,ruby 配 yaml,windows 配 ini,Go 的搭配组合,TOML
Age = 25
Cats = [ "Cauchy", "Plato" ]
Pi = 3.14
Perfection = [ 6, 28, 496, 8128 ]
DOB = 1987-07-05T05:45:00Z
配置文件可直接解析成一个golang struct
type Config struct {
Age int
Cats []string
Pi float64
Perfection []int
DOB time.Time
}
var conf Config
if _, err := toml.Decode(tomlData, &conf); err != nil {
// handle error
}
toml 欠缺的
- 映射结果体字段没有初始值
- 内建flag包没有将命令行参数值解析为一个go结构体,而是零散的变量