day4 - config 选用: cli & viper 简介

你是专案里的那条龙吗?

假设我们都不是一人统包开发, 而且工作的环境也不是开发到正式一个环境的状况下, 那在工作上可能会配合到网路、资料库、云端部署等相关的外单位, 由这些单位提供的id, password, ip, domain或api的连线资料可能会不定期地更换, 若是每次更换时都要重新修改程序, 虽然只是一点点修改时间, 但是修修改改好几回也是一种成本, 另外每次去异动程序就会有上错版本的风险, 所以我们会把常异动的或是可以调整的参数独立出来做成环境变数。

专案离开本机到共用环境之後, 从服务的port到资料库、redis、外部API等连线都会因为不同的环境而需要有不同的设定, 把这些设定参数收拢成可以由外部喂入参数的env, 这样在更换环境时只需要设定该环境底下的env就可以让同一个bin档在不同的环境启动。

设定档套件目前使用过两种:

  • urfave/cli

    • 这套可以在启动时直接添加全局的flag, 依照指定的flag动作, ex: 定义start为启动时要init的function, 再指定-e 来读取设定档 path, 那启动时下的指令就会是:./test start -e .env
    • 启动方式直觉又快速, 可以在本机按照不同的.env 启动多个服务做比较
    • 缺点是编写的.env 只能是一维的key-value
  • viper

    • 可以从多种格式中读取设定档, ex:JSON, YAML..., 也可以绑定flag,
      会需要在程序中指定要读取的设定档名称和格式
      config.SetConfigType("yaml")
      config.SetConfigName("config")
      config.AddConfigPath(".")
      
      启动的指令会是:./test, 预设会读取专案资料夹底下的 config.yaml
    • viper 支援多维的yaml设定档编写, env相较之下比较好阅读

两套都很好上手,这次会使用到的设定项目不多, 所以采用 urfave/cli。
通常会被列在设定档的项目有:

  • 服务本身的 api port
  • 工具连线host, id, password及相关设置, 包含 mysql, scylla, redis, nsq ... 等
  • 相依服务的位址, 包含 grpc service, http service
  • go worker 数量

异动性高的项目跟需要保有弹性的项目都可以列到设定档, 另外还有一套spf13/cobra可以参考, 这个看起来也差不多, 有机会再来使用看看。


<<:  Day 12 - 基本语法7(函式)

>>:  [Java Day01] 大纲与安装

18.MYSQL OR指令

OR和||是相同的意思 OR运算子是左右两边结果有一边为1,就回传1,否则回传0 Tim886911...

铁人赛失败了....

可能是我半夜发文的关系 所以超过十二点了 铁人赛给我失败了 不过也没关系拉我继续记录 今天继续看fl...

[Day9]参观乙太链与区块链

那我们就实际上网去看一下乙太链跟区块链长怎麽样吧! 参观乙太链 这边分别是最近新增的区块以及最近完...

DAY 12 群组相关事件及命令

event 群组相关事件有4种 Join event 加入事件 Leave event 离开事件 M...

应用 LINE Front-end Framework 轻松建立互动 (2)

今天我们要来研究 line-liff-v2-starter 里面写了些什麽,这对之後想开发自己的 L...