Go 中环境变量的实用指南

2025-06-04

Go 中环境变量的实用指南

环境变量是设置软件应用程序配置值的最佳方式,因为它们可以在系统级别定义,独立于软件本身。这是十二要素应用方法论的原则之一,它使应用程序的构建具有可移植性。

使用环境变量

与环境变量交互所需的只是标准os包。以下是
如何访问系统PATH环境变量的示例。

package main
import (
"fmt"
"os"
)
func main() {
// Store the PATH environment variable in a variable
path, exists := os.LookupEnv("PATH")
if exists {
// Print the value of the environment variable
fmt.Print(path)
}
}
view raw main.go hosted with ❤ by GitHub

设置环境变量同样简单:

从 .env 文件加载环境变量


在运行多个项目的开发机器上设置环境变量并不总是可行的。

godotenv是 Ruby
dotenv库的 Go 移植版本。它允许你在文件中定义
应用程序的环境变量.env

要安装该包,请运行:



$ go get github.com/joho/godotenv


Enter fullscreen mode Exit fullscreen mode

将您的配置值添加到.env项目根目录下的文件中:

GITHUB_USERNAME=craicoverflow
GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno
Enter fullscreen mode Exit fullscreen mode

然后您可以在应用程序中使用这些值:

值得注意的是,如果
系统中已经定义了环境变量,那么 Go 将优先使用该环境变量而不是中的值.env


将环境变量包装在配置包中

像这样直接访问环境变量固然很好,但维护起来却不太方便,不是吗?每个值都是一个字符串——想象一下,当修改环境键时,必须更新每个引用!

为了解决这个问题,让我们创建一个配置包,以更加集中和易于维护的方式访问环境变量

这是一个简单的config包,它将以
Config结构体形式返回配置值。我们可以选择定义一个默认值,因此当
环境变量不存在时,将使用默认值。

接下来,我们应该向结构体添加不同的类型Config。当前的实现只能处理string多种类型,这对于较大的应用程序来说不太实用。

让我们添加函数来处理bool类型sliceinteger

使用这些环境变量更新您的.env文件。

GITHUB_USERNAME=craicoverflow
GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno
MAX_USERS=10
USER_ROLES=admin,super_admin,guest
DEBUG_MODE=false
Enter fullscreen mode Exit fullscreen mode

现在您可以从应用程序的其余部分访问这些值:

就是这样

市面上有很多库声称能为你的 Go 应用程序提供配置“解决方案”。但是,既然 自己动手做配置
也同样简单,这真的是一个解决方案吗?

如何管理 Go 应用程序中的配置?

你喜欢这篇文章吗?欢迎访问https://endaphelan.me查看更多类似的文章。

文章来源:https://dev.to/craicoverflow/a-no-nonsense-guide-to-environment-variables-in-go-a2f
PREV
在 React 中使用 TypeScript 的 useReducer Hook
NEXT
我的 vim 设置可以加速我的 Electron 和 React Native 应用程序的 JavaScript 编码