赞
踩
前两天在工作过程中又遇到了一直以来困惑我的一个问题,就是Go配置项的管理问题。
在开发一个新项目的时候,往往涉及到配置项的管理。个人小项目可能会通过配置文件来传入、环境变量来传入,也可能通过命令行参数来传入,公司级别的项目还可能用到各种各样的config center。那么,如何来管理这些配置项就会很麻烦。
在我的习惯中,通常会使用至少两种方式来传入配置——如配置文件加命令行。原因有三:
大部分情况下我运行的程序无需进行定制化,此时常使用默认配置文件。但有时候我们要临时修改一些选项,可以直接通过命令行参数传入覆盖默认配置
我通常会将默认配置文件直接添加到Git仓库里,但其中有部分包含敏感信息的配置(如加密密钥),我需要通过其他方式传入,如环境变量、命令行等
程序如果需要同时在测试环境和生产环境运行,我可以通过命令行选项来控制一些选项,而无需准备两个不同的配置文件
以往在命令行覆盖配置文件中配置项的时候,有一个很大的痛点就是,我不可能给每一个配置项都编写一个对应的命令行参数,而且随着项目的迭代,每次添加新的配置项都要添加对应的命令行参数,不太方便。
Go生态里有一个开源项目viper可以用于处理类似的问题,但是项目比较大,和pflag、cobra的耦合也比较深。
其实我需要的功能很简单,一个类似Java -Dserver.port=8000
中的-D
这样的选项,让我可以动态的修改配置文件中的一些配置项。这样ÿ
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。