处理服务配置的最佳方式是什么?

What is the best way to handle configuration of a service?

我正在寻找在 Go 中读取大中型项目配置文件的最佳方式。

  1. 哪个库适合读写配置文件?
  2. 我应该以什么格式保存配置文件(config.json.envconfig.yaml 或...)?

在 Golang 中有多种方式来处理配置。如果你想用 config.json 处理,那么看看 this answer。要处理环境变量,您可以使用 os 包,例如:

// Set Environment Variable
os.Setenv("FOO", "foo")
// Get Environment Variable
foo := os.Getenv("FOO")
// Unset Environment Variable
os.Unsetenv("FOO")
// Checking Environment Variable
foo, ok := os.LookupEnv("FOO")
if !ok {
  fmt.Println("FOO is not present")
} else {
  fmt.Printf("FOO: %s\n", foo)
}
// Expand String Containing Environment Variable Using $var or ${var}
fooString := os.ExpandEnv("foo${foo}or$foo") // "foofooorfoo"

你也可以使用godotenv包:

# .env file
FOO=foo

// main.go
package main

import (
  "fmt"
  "log"
  "os"

  "github.com/joho/godotenv"
)

func main() {
  // load .env file
  err := godotenv.Load(".env")
  if err != nil {
    log.Fatalf("Error loading .env file")
  }
  // Get Evironment Variable
  foo := os.Getenv("FOO")

查看 this source 了解更多信息。