0Pricing
Go Academy · Урок

Чтение конфигурационных файлов

Загружайте 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/viper
  • import "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 — локальная установка не требуется.

Все уроки этого курса

  1. Чтение конфигурационных файлов
  2. Переменные окружения
  3. Значения по умолчанию и отслеживание
  4. Привязка к структурам
← Назад к Go Academy