Каков наилучший способ настройки службы?

Я ищу лучший способ чтения файлов конфигурации в больших и средних проектах в Go.

  1. Какая библиотека подходит для чтения и записи файлов конфигурации?
  2. В каком формате сохранять файлы конфигурации (config.json или .env или config.yaml или...)?

person MahdiRazaqi    schedule 02.04.2021    source источник
comment
Этот вопрос, кажется, основан на мнении. Не могли бы вы определить какие-либо конкретные качества, которые вы ищете?   -  person Hymns For Disco    schedule 02.04.2021
comment
Запросы на библиотеки не по теме. Остальная часть вашего вопроса также полностью основана на мнении. На мой взгляд, например: нет никаких причин использовать файлы .env.   -  person Flimzy    schedule 02.04.2021
comment
Привет! К сожалению, с вашим вопросом есть несколько проблем: 1) Это не по теме SO, потому что это не связано с какой-либо проблемой. связанные с программированием; 2) На самом деле у вас есть несколько вопросов; 3) Вы, кажется, озабочены идеей использования файлов .env для конфигурации — это неплохо, но я бы сказал, что они служат цели, отличной от общей конфигурации, и не должны быть прочитаны самими службами, а скорее кем-то < i>запускает эти службы.   -  person kostix    schedule 02.04.2021
comment
…поэтому я бы рекомендовал попробовать использовать другие места, чтобы задать свои вопросы : сабреддит r/golang или канал Gopher в Slack или форум Golangbridge — все должно работать без нарушения правил темы; SO просто не подходит для таких открытых/исследовательско-образовательных вопросов.   -  person kostix    schedule 02.04.2021


Ответы (1)


Существует множество способов обработки конфигурации в Golang. Если вы хотите работать с config.json, посмотрите этот ответ. Для обработки переменных среды вы можете использовать пакет 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")

Дополнительные сведения см. в этом источнике.

person Bhojendra Rauniyar    schedule 02.04.2021