TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
myStack

14 Dec 2025, 17:04

Открыть в Telegram Поделиться Пожаловаться

Либа конфига

При организации пакета конфига часто используют следующий вариант:
package config

type Config struct {
Database DatabaseConfig
Kafka KafkaConfig
}

type DatabaseConfig struct { /// }

type KafkaConfig struct { /// }
Пакет config, который содержит главную структуру конфига, а также все подструктуры.

Минус этого варианта в том, что пакет, например, бд будет делать импорт DatabaseConfig из пакета общего конфига, пакет кафки - KafkaConfig итд.

Гораздо более логичен вариант, когда каждая подструктура конфига лежит в своем пакете, а в пакет общего конфига всё это импортируется:
package config

type Config struct {
Database database.Config
Kafka kafka.Config
}

Однако, тогда в подструктурах могут быть теги от либы, считывания конфига, что делает хоть и неявную, но все же зависимость от либы конфига:
package database

type Config struct {
User string `yaml:"user"`
Password string `env:"password"`
}

и если тэг для user можно иногда убрать (т.к. user считается неявно в некоторых либах т.к. они под капотом используют mapstructure), то с env так сделать не выйдет.

Из-за отсутствия этой возможности и некоторых других я написал свою либу для конфига. Она по большей части основывается на koanf - имхо лучшей либе для конфига в go (у нее прекрасный интерфейс, намного более красивый, чем у viper) и добавляет некоторые фичи.

Чего не хватало в существующих:
- Возможности задать название env'а не в тегах структуры, а в самом файле конфига {"env": "DB_PASSWORD"}
- Ошибки, если поле в структуре есть, а в ямле отсутствует (чтобы забытое значение не превратилось в zero-value)
- Ошибки, если поле в ямле есть, а в структуре отсутствует (чтобы мусора в ямле не было)
- Опционального считывания. Если поле в структуре - указатель, то ошибки не будет при отсутствии его в ямле

Также либа поддерживает всё, что поддерживает сам koanf

https://github.com/rostislaved/cleanconfig

806 0 15 1 6
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot