Чтение конфигурационных файлов
Загружайте YAML, JSON и TOML
«Чтение конфигурационных файлов» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Конфигурация находится вне кода
Жёстко заданные в программе Go значения, такие как порты, имена узлов и время ожидания, ненадёжны. Viper — фактически стандартная библиотека конфигурации для Go: она считывает параметры из файлов, переменных окружения, флагов и удалённых хранилищ.
В этом уроке Вы загрузите конфигурацию из файла на диске.
Какие форматы читает Viper
Viper изначально поддерживает множество форматов:
- YAML (
.yaml/.yml) - JSON (
.json) - TOML (
.toml) - файлы свойств HCL, INI и Java
Формат выбирается с помощью SetConfigType, либо Viper определяет его по расширению файла.
Установка и импорт Viper
Добавьте Viper в модуль и импортируйте его:
go get github.com/spf13/viperimport "github.com/spf13/viper"
Поскольку Viper является внешней зависимостью, фрагменты, которые его импортируют, нельзя запустить в этом проигрывателе уроков. Где возможно, мы имитируем это поведение с помощью стандартной библиотеки.
import "github.com/spf13/viper"Указываем Viper, где искать
Перед чтением настройте имя и тип файла, а также пути поиска:
viper.SetConfigName("config")задаёт базовое имя без расширенияviper.SetConfigType("yaml")задаёт форматviper.AddConfigPath(".")добавляет каталог для поиска
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
viper.AddConfigPath("/etc/myapp")Чтение файла
Вызовите viper.ReadInConfig(), чтобы загрузить файл. Он возвращает ошибку, которую необходимо проверить:
- При отсутствии файла возвращается
ConfigFileNotFoundError - При неверном формате файла возвращается ошибка разбора
if err := viper.ReadInConfig(); err != nil {
log.Fatalf("failed to read config: %v", err)
}Пример конфигурации YAML
Представьте файл config.yaml с таким содержимым. Viper разворачивает вложенные ключи с помощью точек, поэтому порт становится ключом server.port.
server:
port: 8080
host: "localhost"
debug: trueПолучение типизированных значений
Viper предоставляет типизированные функции чтения, поэтому Вам не нужно выполнять преобразования вручную:
viper.GetInt("server.port")viper.GetString("server.host")viper.GetBool("debug")
port := viper.GetInt("server.port")
host := viper.GetString("server.host")
debug := viper.GetBool("debug")
fmt.Println(host, port, debug)JSON работает так же
Переход на JSON изменяет только содержимое файла и тип конфигурации. Те же пути к ключам и функции чтения продолжают работать. Благодаря этой переносимости Viper популярен: Вашему коду не важно, какой формат выбрали специалисты по эксплуатации.
{
"server": { "port": 8080, "host": "localhost" },
"debug": true
}TOML также поддерживается
TOML широко используется в экосистеме Go, его применяют многие интерфейсы командной строки. Те же вложенные ключи преобразуются в пути с точками.
[server]
port = 8080
host = "localhost"
debug = trueРазбор JSON стандартной библиотекой
Чтобы увидеть эту идею в работе, рассмотрим обычный разбор конфигурации JSON в Go без Viper — только с помощью encoding/json и карты (сам Viper внутри также использует обобщённую карту).
package main
import (
"encoding/json"
"fmt"
)
func main() {
raw := "{\"port\":8080,\"host\":\"localhost\"}"
var c map[string]any
if err := json.Unmarshal([]byte(raw), &c); err != nil {
panic(err)
}
fmt.Printf("%v:%v\n", c["host"], c["port"])
}Рабочий пример: чтение в карту
Эта автономная программа разбирает конфигурацию JSON в обобщённую карту и выводит значения, воспроизводя внутреннее поведение Viper при работе с JSON.
package main
import (
"encoding/json"
"fmt"
)
func main() {
raw := "{\"port\":8080,\"host\":\"localhost\"}"
var m map[string]any
json.Unmarshal([]byte(raw), &m)
fmt.Println("host:", m["host"])
fmt.Println("port:", m["port"])
}Быстрая проверка
Проверьте, насколько хорошо Вы поняли чтение файлов конфигурации с помощью Viper.
Итоги
Вы узнали, как Viper читает файлы конфигурации:
- Он прозрачно поддерживает YAML, JSON и TOML
- Настройка выполняется с помощью
SetConfigName,SetConfigType,AddConfigPath ReadInConfig()загружает файл и возвращает ошибку- Типизированные функции чтения, такие как
GetIntиGetString, считывают значения по ключу с точками
Далее: переопределение конфигурации с помощью переменных окружения.
Часто задаваемые вопросы
Урок «Чтение конфигурационных файлов» бесплатный?
Да — полный текст урока «Чтение конфигурационных файлов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Чтение конфигурационных файлов»?
Загружайте YAML, JSON и TOML Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Чтение конфигурационных файлов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Чтение конфигурационных файлов
- Переменные окружения
- Значения по умолчанию и отслеживание
- Привязка к структурам