Что использовать в качестве конфигов в Golang?
14 марта 2015 Golang 11800 просмотров
Допустим, вам необходимо хранить конфигурационные данные в файлах, какой формат вы будете использовать? YAML, INI? А почему бы не JSON? Мне очень нравится формат YAML, и в одном приложении я был начал его использовать, подключил парсер, но потом опомнился, ведь поддержка JSON в Го нативная. И можно довольно просто, без внешних библиотек экспортировать конфиг в Го-структуры.

import "encoding/json"
Создадим древовидный JSON файл.
{
   "applications": [
       {
           "name": "app1",
           "db": {
              "host": "db2",
              "user": "root",
              "pass": "",
              "dbname": "test"
           }
       },
       {
           "name": "app2",
           "db": {
              "host": "db2",
              "user": "root",
              "pass": "",
              "dbname": "test"
           }
       }
    ]
}
Опишем структуру. Обращу внимание, что имена свойств нужно писать с большой буквы.
type Config struct {
    Applications []Application
}

type Application struct {
    Name string
    Db   Db
}

type Db struct {
    Host   string
    User   string
    Pass   string
    Dbname string
}
А теперь экспортируем JSON в Го.
file, _ := os.Open("PATHTOYOURFILE")
decoder := json.NewDecoder(file)
config := new(Config)
err := decoder.Decode(&config)
if err != nil {
    // handle it
}
В переменной config у нас будут наши данные. Как теперь получить что-нибудь?
config.Applications[0].Db.Host
Не забываем подключить os package, чтобы прочитать файл, вы можете обойтись без него, если читаете JSON не из файла.