alpha
This commit is contained in:
87
README.md
87
README.md
@@ -1,3 +1,88 @@
|
||||
# config
|
||||
|
||||
Описание интерфейса конфигурации, а так же инструменты для загрузки и разбора из формата YAML
|
||||
[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)
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user