为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用戈多腾夫根据构建命令在 env 文件之间切换?

如何使用戈多腾夫根据构建命令在 env 文件之间切换?

Go
一只名叫tom的猫 2022-09-26 20:20:55
我计划使用godotenv为我的项目设置不同的环境,但我不确定如何在文件之间切换,如,dev.envuat.envprod.env我希望能够在我的 Docker 命令中传递一个值,并让 godotenv 拾取相对 env 文件 - 在这种情况下(假设这是正确的方法。RUN go build -o my-project --prod .prod.env另外,我如何确保其他env文件不会包含在特定env的构建中。
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

我会建议你按照命令行上的Go文档的建议使用标志-X


-X importpath.name=value

    Set the value of the string variable in importpath named name to value.

    This is only effective if the variable is declared in the source code either uninitialized or initialized to a constant string expression. -X will not work if the initializer makes a function call or refers to other variables.

    Note that before Go 1.5 this option took two separate arguments.

这样,您就可以调用引用它的任何文件的位置。.env


例如go build -ldflags="-X 'package_path.variable_name=new_value'" 


那是


go build -ldflags "-X 'my/main/config.Version=v1.0.0'" -o $(MY_BIN) $(MY_SRC)


查看完整回答
反对 回复 2022-09-26
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

在构建阶段对环境进行硬编码对我来说似乎很奇怪。您不想为每个env构建差异映像,这是浪费。


模块文档建议了更好的方法:


现有 env 优先于稍后加载的 env。


管理多个环境(即开发、测试、生产)的约定是创建一个名为 {YOURAPP}_ENV的 env,并按以下顺序加载 envs:


env := os.Getenv("FOO_ENV")

if "" == env {

  env = "development"

}


godotenv.Load(".env." + env + ".local")

if "test" != env {

  godotenv.Load(".env.local")

}

godotenv.Load(".env." + env)

godotenv.Load() // The Original .env


查看完整回答
反对 回复 2022-09-26
  • 2 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信