godotenv в Go: однострочник, который сэкономит тебе нервы (но не в проде)
Если ты работаешь с переменными окружения через joho/godotenv, почти наверняка у тебя в начале main.go живёт классика жанра: импорт пакета, вызов godotenv. Load(), проверка ошибки, log. Fatal на всякий случай. Работает? Да. Красиво? Нет.
А теперь фокус. Подключаешь godotenv/autoload через пустой идентификатор, и всё. Больше ничего писать не надо.
Пустой идентификатор говорит Go: «мне сам пакет не нужен, просто запусти его init()». А в init() как раз и вызывается Load().
Переменные окружения подхватываются до того, как стартует main, и даже до инициализации package-level переменных.
То есть твои var cfg = os. Getenv("...") на уровне пакета уже увидят нужные значения, а не пустоту.
Для скриптов, демок, пет-проектов и быстрых экспериментов это чистая магия.
Минус две трети бойлерплейта и ноль мыслей о том, где и когда загружать .env.
Но вот тебе ложка дёгтя, и она важная. В проде так делать нельзя. Причины простые. Во-первых, autoload молча проглатывает ошибку от Load(). Нет файла, кривые права, битая кодировка — ты об этом не узнаешь, приложение просто запустится с пустыми переменными и начнёт падать где-то глубже, в самом неожиданном месте.
Отлаживать такое удовольствие ниже среднего.
Во-вторых, никакого контроля над тем, какой файл грузить и в каком порядке.
Никаких .env.local, .env.production, никаких фолбэков. Только дефолтный .env в рабочей директории, и точка.
Autoload - отличный инструмент, когда тебе надо быстро и без лишнего шума.
Но как только проект выходит за рамки песочницы, возвращайся к явному Load() с нормальной обработкой ошибок. Явное лучше неявного, особенно когда речь про конфигурацию.