【问题标题】:Using Environment Variables across files - GOPATH跨文件使用环境变量 - GOPATH
【发布时间】:2020-04-12 03:28:39
【问题描述】:

这是我第一次在不使用 GOPATH 的情况下使用 Go 进行编码。
我有一个go.mod 文件。
我正在尝试通过 Sendgrid 发送电子邮件;我有一个包含我的 SENDGRID_API_KEY 的文件,名为 sendgrid.env
当尝试在我的 main.go 文件中使用密钥时,该值没有被拉出。

fmt.Println(os.LookupEnv("SENDGRID_API_KEY")) // empty string 
fmt.Println(os.Getenv("SENDGRID_API_KEY")) // empty string

我还使用了返回 false 的“LookupEnv”。
任何帮助,将不胜感激。

【问题讨论】:

  • 那么os 包应该如何知道在您的sendgrid.env 文件中查找环境变量?
  • @icza 我需要在那个 env 文件中设置一些东西,比如一个包吗? API 密钥已导出。
  • 您需要添加 env 文件的结构(不是内容),以便我们告诉您如何阅读它。就像它看起来的一个例子一样
  • 导出 SENDGRID_API_KEY=MYAPIKEY
  • Go 不会神奇地使用或理解“env 文件”。如果您想读取该文件,则需要编写代码(或使用库)来做到这一点。

标签: go environment-variables


【解决方案1】:

os.Getenv()os.LookupEnv() 不检查文件。如果您的环境变量在文件中,您必须自己加载它们。或使用为您执行此操作的 3rd 方库,例如github.com/joho/godotenv,看起来像这样:

if err := godotenv.Load("sendgrid.env"); err != nil {
    log.Fatal("Error loading sendgrid.env file")
}

另一种选择是在启动您的应用程序之前导出环境变量,例如:

export SENDGRID_API_KEY=mykey
./mygoapp

或者在一行中:

SENDGRID_API_KEY=mykey ./mygoapp

或者,如果您的文件中有环境变量,您可以使用source 命令:

source sendgrid.env
./mygoapp

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2014-01-26
    • 2021-04-26
    相关资源
    最近更新 更多