Avatar ·

如何在 Go 中正确管理配置:env、标志还是文件?

大家好!我是 Go 新手,正在尝试理解如何正确存储应用程序设置。我开始编写一个小型 Web 服务器,遇到了一个问题:我希望应用程序可以在不重新编译的情况下进行配置——更改端口、数据库连接字符串、日志级别。 目前我是这样做的:创建一个 config 包,在 init() 中读取环境变量。但这感觉像是一个临时解决方案,尤其是当设置很多时(大约 20 个)。另外,我不知道如何设置默认值以及如何方便地将配置传递给其他包。 以下是我当前的代码: ```go package config import "os" var Port string var DBHost string func init() { Port = os.Getenv("PORT") if Port == "" { Port = "8080" } DBHost = os.Getenv("DB_HOST") if DBHost == "" { DBHost = "localhost" } } ``` 然后在 main.go 中,我直接访问 config.Port。但这是全局变量,在测试中很难覆盖它们。 请告诉我,在 Go 中通常如何管理配