Ответ
Управление конфигурацией для разных окружений — ключевая задача в разработке. В Go для этого используют несколько подходов:
-
Переменные окружения: Самый простой и популярный способ, соответствующий принципам 12-factor app. Для чтения используется стандартный пакет
os
.// Пример чтения переменной окружения с fallback-значением dbHost := os.Getenv("DB_HOST") if dbHost == "" { dbHost = "localhost" // Значение по умолчанию для dev-окружения }
-
Файлы
.env
: Для удобства локальной разработки переменные окружения хранят в.env
файлах и загружают их с помощью библиотек, например,github.com/joho/godotenv
. -
Конфигурационные файлы (YAML, JSON, TOML): Для сложных конфигураций используют файлы. Популярная библиотека
github.com/spf13/viper
умеет читать конфиги из файлов, переменных окружения, флагов и удаленных хранилищ (etcd, Consul), что делает ее очень гибкой. -
Флаги командной строки: Для простых переключателей (например,
-env=production
) используется стандартный пакетflag
.
Лучшая практика:
Комбинировать подходы. Например, использовать Viper
для чтения конфигурации из файла (config.yaml
), но позволять переопределять любые параметры через переменные окружения. Это обеспечивает гибкость как для локальной разработки, так и для развертывания в Docker/Kubernetes, где управление через переменные окружения является стандартом.