共享变量
共享变量
一、PublicVar
通过PublicVar实现共享,有两种方式:
1)修改代码,每次升级时修改对应变量值
2)无需修改代码,通过ldflags在编译时指定变量值
1、ldflags使用示例
1 | // main.go |
go build -ldflags "-X main.Version=1.0.0" -x -o product main.go
2、共享变量
优点
- 使用简单
缺点
- 使用方必须引入共享变量所在module
- 存在package cycle import依赖风险
推荐建立单独环境module,只用来定义变量,避免循环package依赖风险。
二、运行时传参
执行go程序编译后的二进制产物时,增加参数。若当前编译出的二进制产物为go-product。
1 | go-prudct -psm a.b.c -conf-dir conf |
1 | package main |
1、共享变量
1)os.Args直接获取运行参数
优点
- 使用方无需引入多余module
缺点
- 需要自行解析参数,解析稍显麻烦
2)flag解析运行参数
- flag.Parse方法调用前,
所定义的flag
必须不少于实际的flag
,否则解析会异常 - flag.Parse方法调用后,不允许再次定义flag,解析前先判断
flag.Parsed()
优点
- 使用方无需引入多余module
缺点
- 由于执行顺序无法保证,所以使用方必须都有以下逻辑
- 判断flag是否已解析过
- 若未解析过,则定义所有flag,然后进行解析
- 如果解析过,则通过flag.Lookup查找指定变量
三、os environment
设置操作系统环境变量,go通过os.Getenv()
获取。
1、共享变量
优点
- 使用方无需引入多余module
- 获取逻辑简单
缺点
- 不适合于操作系统内运行多个差异化实例场景
四、第三方存储
借助本地文件、数据库等存储。