90 lines
2.4 KiB
Markdown
90 lines
2.4 KiB
Markdown
# config
|
|
|
|
[https://pkg.go.dev/git.gm6.ru/icewind/config](https://pkg.go.dev/git.gm6.ru/icewind/config)
|
|
|
|
Минималистичный Go-пакет для загрузки и валидации конфигурации из YAML-файлов.
|
|
|
|
Пакет решает простую, но часто встречающуюся задачу:
|
|
- загрузить конфигурацию из файла или из `[]byte`
|
|
- распарсить YAML в пользовательскую структуру
|
|
- автоматически выполнить валидацию конфига после загрузки
|
|
|
|
---
|
|
|
|
## Возможности
|
|
|
|
- 📄 Загрузка конфигурации из файла (`LoadFromFile`)
|
|
- 💾 Загрузка конфигурации из памяти (`LoadFromData`)
|
|
- 🔍 Валидация через пользовательский метод `Check()`
|
|
- 🧩 Использование стандартного `gopkg.in/yaml.v3`
|
|
- ⚡ Минимальный и прозрачный API без лишних зависимостей
|
|
|
|
---
|
|
|
|
## Установка
|
|
|
|
```bash
|
|
go get git.gm6.ru/icewind/config
|
|
```
|
|
|
|
## Описание
|
|
|
|
Объект данных конфига должен соотвутствовать интерфейсу
|
|
|
|
```go
|
|
type IConfig interface {
|
|
Check() error
|
|
}
|
|
```
|
|
|
|
Этот метод будет автоматически вызван после успешного парсинга YAML.
|
|
Если Check() возвращает ошибку — загрузка конфигурации считается неуспешной.
|
|
|
|
## Пример конфигурационного файла в формате YAML
|
|
|
|
```yaml
|
|
addrs:
|
|
- 127.0.0.1:8080
|
|
- 192.168.1.1:8080
|
|
- 172.16.0.1:8080
|
|
name: "Config version 1"
|
|
enabled: true
|
|
version: 1
|
|
```
|
|
|
|
## Пример использования
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"git.gm6.ru/icewind/config"
|
|
)
|
|
|
|
type AppConfig struct {
|
|
Addrs []string `yaml:"addrs"`
|
|
Name string `yaml:"name"`
|
|
Enabled bool `yaml:"enabled"`
|
|
Version int `yaml:"version"`
|
|
}
|
|
|
|
func (c *AppConfig) Check() error {
|
|
if c.Version <= 0 {
|
|
return errors.New("version must be > 0")
|
|
}
|
|
if len(c.Addrs) == 0 {
|
|
return errors.New("addrs list must not be empty")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
var cfg AppConfig
|
|
|
|
if err := config.LoadFromFile("config.yaml", &cfg); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
``` |