管理Go库中的环境变量

  • 本文关键字:环境变量 Go 管理 go
  • 更新时间 :
  • 英文 :


我正在用Go写一个库。有几个可配置的值,我正在寻找理解一些好方法来设置这些值。我考虑了以下选项:

  1. 使用os.Getenv()获取环境变量的值,无论它们在哪里被使用。缺点是读取相同的环境变量多次。
  2. 创建一个配置文件,读取所有配置变量,并传递config结构体。我不打算在多个地方传递这样的结构。有些文件需要在启动时确定静态值。
  3. 使用init()函数;不建议这样做,至少不建议多次init。

关于更简单、更干净的方法有什么建议吗?

从配置文件或环境中读取设置应该在启动时完成。如果我理解正确的话,您的问题是关于如何将这些值注入到其他包中。

这里有一些想法。

  1. 包含所有设置的全局配置包。这些设置在启动时读取,然后在这里全局可用。职业:所有设置可用,无处不在。反对:设置是可变的,考虑通过添加函数而不是导出设置对象将其设置为只读。
  2. 在启动时读取设置后,将它们注入每个包中。需要设置的包可以有一个接受所有必要设置的公共Init(...)函数。不要使用init()职业:没有大的配置结构,只有必要的设置。反对:全局变量到处都是,可以变得非常混乱,你可以忘记调用Init(),等等。
  3. 要求设置:为了避免涉及上述全局变量的混乱,只需在使用它们的所有代码中要求设置:对于函数,接受设置作为参数。如果您有一个带有方法的结构体,那就更好了:将设置设置为需要定义的结构体的一个字段。如果你有一个构造函数,让这个构造函数接受这个设置。职业:没有全局变量,对设置的依赖是明确的。反对:在您追踪它们的来源之前,可能无法立即看出哪些值是应用程序设置。

第三种方法是我最喜欢的方法,因为我认为它使哪里更清楚设置的来源和使用方式

最新更新