1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tietang-props

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Унифицированный инструмент для работы с конфигурациями: Props

Props — это унифицированный инструмент, который позволяет работать с различными конфигурационными источниками и преобразовывать их в формат, подобный свойствам (properties). Он предоставляет единый API для доступа к этим свойствам.

Поддерживаемые конфигурационные источники:

  • файлы свойств (properties);
  • файлы INI;
  • файлы YAML;
  • Apollo k/v, k/props, k/ini, k/yaml;
  • Nacos k/props[properties], k/yaml, k/ini, k/ini_props;
  • ZooKeeper k/v;
  • ZooKeeper k/props[properties], k/yaml, k/ini, k/ini_props;
  • Consul k/v;
  • Consul k/props[properties], k/yaml, k/ini, k/ini_props;
  • etcd API V2 k/v;
  • etcd API V2 k/props.

Свойства:

  • ключ должен быть строкой;
  • значение может быть одним из следующих типов данных: строка, целое число, число с плавающей точкой, логическое значение или время.Duration.

Другие особенности:

  • поддержка Unmarshal;
  • поддержка переменных контекста eval;
  • возможность комбинировать несколько источников конфигурации;
  • добавление системных переменных по умолчанию с самым низким приоритетом.

Установка:

go get -u github.com/tietang/props/v3

или через go mod:

go mod tidy go mod vendor

Использование:

  1. Файлы свойств (properties): формат: [key][=|:][value] \n каждая строка представляет собой пару ключ-значение, разделённую знаком равенства или двоеточием. Ключ может быть любым символом, кроме знака равенства, двоеточия и пробела. Пример: server.port=8080 или server.port: 8080.

  2. Чтение файла через kvs.ReadPropertyFile:

    p, err := kvs.ReadPropertyFile("config.properties")
    if err != nil {
       panic(err)
    }
    stringValue, err := p.Get("prefix.key1")
    fmt.Println(stringValue, err)
    // Если не существует, возвращает значение по умолчанию
    stringDefaultValue := p.GetDefault("prefix.key1", "default value")
    fmt.Println(stringDefaultValue)
    boolValue, err := p.GetBool("prefix.key2")
    fmt.Println(boolValue)
    boolDefaultValue := p.GetBoolDefault("prefix.key2", false)
    fmt.Println(boolDefaultValue)
    intValue, err := p.GetInt("prefix.key3")
    fmt.Println(intValue)
    intDefaultValue := p.GetIntDefault("prefix.key3", 1)
    fmt.Println(intDefaultValue)
    floatValue, err := p.GetFloat64("prefix.key4")
    fmt.Println(floatValue)
    floatDefaultValue := p.GetFloat64Default("prefix.key4", 1.2)
    fmt.Println(floatDefaultValue)
  3. Загрузка из io.Reader:

    p := kvs.NewProperties()
    p.Load(strings.NewReader("some data"))
    p.Load(bytes.NewReader([]byte("some data")))
  4. Создание через kvs.NewPropertiesConfigSource:

    file := "/path/to/config.properties"
    p := kvs.NewPropertiesConfigSource(file)
    p = kvs.NewPropertiesConfigSourceByFile("name", file)
    // Создание на основе карты памяти
    m := make(map[string]string)
    m["key"]="value"
    p = kvs.NewPropertiesConfigSourceByMap("name", m)
  5. Использование Properties ConfigSource:

    var cs kvs.ConfigSource
    //
    cs = kvs.NewPropertiesConfigSource("config.properties")
    cs = kvs.NewPropertiesConfigSourceByFile("config", "config.properties")
    
    stringValue, err := cs.Get("prefix.key1")
    // Если не существует, возвращает значение по умолчанию
    stringDefaultValue := cs.GetDefault("prefix.key1", "default value")
    boolValue, err := cs.GetBool("prefix.key2")
    boolDefaultValue := cs.GetBoolDefault("prefix.key2", false)
    intValue, err := cs.GetInt("prefix.key3")
    intDefaultValue := cs.GetIntDefault("prefix.key3", 1)
    floatValue, err := cs.GetFloat64("prefix.key4")
    floatDefaultValue := cs.GetFloat64Default("prefix.key4", 1.2)
  6. Файлы INI: формат:

    [section]
    [key1][=|:][value1] 
    [key1][=|:][value1]
    ...

    Не поддерживает подразделы. Пример:

    [server]
    port: 8080
    read.timeout=6000ms
    
    [client]
    connection.timeout=6s
    query.timeout=6s
    ``` **p := ini.NewIniFileConfigSource(file)**
    

p = ini.NewIniFileConfigSourceByFile("name", file)

### Nacos

只支持key/properties配置形式。

例如有如下配置:

http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=test.id&group=testGroup&tenant=testTenant

```properties
key-0.x0=value-00
key-0.x1=value-01
key-0.x2=value-02

基本用法:

address := "127.0.0.1:8848"
c := NewNacosPropsConfigSource(address)
c.DataId = "test.id"
c.Tenant = "testTenant"
c.Group = "testGroup"
v:=c.GetDefault("key-0.x0","defaultval") //value-00
**Поддерживается только перевод текста, без кода.**

**p := ini.NewIniFileConfigSource (file)** — это строка кода на языке Go, которая создаёт новый объект типа *ini.IniFileConfigSource*, используя файл с данными конфигурации (*file*).

В этом контексте *ini* — это пакет, который предоставляет функции для работы с конфигурационными файлами в формате INI.

*ini.NewIniFileConfigSource* — функция, которая принимает путь к файлу конфигурации и возвращает новый объект *ini.IniFileConfigSource*. Этот объект можно использовать для чтения и записи данных из файла конфигурации.

Далее идёт описание того, как работает этот объект и как его можно использовать.

**ini.NewIniFileConfigSourceByFile ("name", file)** — эта функция аналогична предыдущей, но она также позволяет указать имя файла конфигурации (*"name"*). Это может быть полезно, если вы хотите создать несколько объектов *ini.IniFileConfigSource* для разных файлов конфигурации.

После этого идёт пример использования этих функций. В примере создаётся новый объект *c* типа *NewNacosPropsConfigSource*, который будет использоваться для получения данных конфигурации из сервера Nacos. Затем объекту *c* присваиваются значения свойств *DataId*, *Tenant* и *Group*. После этого вызывается метод *GetDefault* объекта *c*, чтобы получить значение свойства *key-0.x0* по умолчанию.

Этот пример показывает, как можно использовать объекты *ini.IniFileConfigSource* для получения данных конфигурации из различных источников. ```golang

kv1 := []string{"go.app.key1", "value1", "value1-2"}
kv2 := []string{"go.app.key2", "value2", "value2-2"}

p1 := kvs.NewEmptyMapConfigSource("map1")
p1.Set(kv1[0], kv1[1])
p1.Set(kv2[0], kv2[1])
p2 := kvs.NewEmptyMapConfigSource("map2")
p2.Set(kv1[0], kv1[2])
p2.Set(kv2[0], kv2[2])
conf.Add(p1)
conf.Add(p2)

//value1==value1-2
value1, err := conf.Get(kv1[0])
fmt.Println(value1)
//value2=value2-2
value2, err := conf.Get(kv2[0])
fmt.Println(value2)

Этот фрагмент кода написан на языке Go. Он описывает использование нескольких источников конфигурации с разными приоритетами.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/tietang-props.git
git@api.gitlife.ru:oschina-mirror/tietang-props.git
oschina-mirror
tietang-props
tietang-props
master