2016-11-24 3 views
1

Я пытаюсь разобрать файл yaml для небольшого проекта, который у меня есть.Parsing YAML in Go: карта в списке

Цель состоит в том, чтобы информация о приложении отображалась в файле конфигурации, включая адрес в файле сервера, в случае необходимости его обновления. Он находится в конфигурационном файле для удобства «редактирования».

Главное, что есть некоторые тесты на подключение, которые необходимо выполнить, прежде чем приложение действительно запустится. Я пытаюсь разобрать этот файл. Это выглядит следующим образом:

conf.yaml 

app: 
    version: "1" 
    name:  MySuperApp 
    configLocation: http://configaddress 

test_url: 
    - 
    name:  siteName1 
    url:  http://siteUrl1 
    - 
    name:  siteName2 
    url:  http://siteUrl2 
    proxy_port: 5678 

я писал, я могу получить то, что в приложении: а не то, что в test_url:

package main 

import (
    "fmt" 
    "io/ioutil" 
    "path/filepath" 
    "gopkg.in/yaml.v2" 
) 

type AppInfo struct { 
    Name string `yaml:"name"` 
    Version string `yaml:"version"` 
} 

type Config struct { 
    App AppInfo `yaml:"app"` 
} 

type TestUrl struct { 
    Name  string `yaml:"name"` 
    Url   string `yaml:"url"` 
    ProxyPort string `yaml:"proxy_port,omitempty"` 
} 

type TestUrls struct { 
    ATest []TestUrl `yaml:"test_url"` 
} 

func main() { 
    filename, _  := filepath.Abs("./config/conf.yaml") 
    yamlFile, err := ioutil.ReadFile(filename) 

    if err != nil { 
     panic(err) 
    } 

    var config Config 
    err = yaml.Unmarshal(yamlFile, &config) 
    if err != nil { 
     panic(err) 
    } 

    var test TestUrls 
    err = yaml.Unmarshal(yamlFile, &test) 
    if err != nil { 
     panic(err) 
    } 

    fmt.Println("Application : ", config.App.Name,"\nVersion : ", config.App.Version) 

    fmt.Println(test) 
} 

На выходе я получаю:

Application : MySuperApp 
Version : 1 
{[]} 

Что мне не хватает?

+0

0 Данные файла и кода работают довольно хорошо. '' 'Приложение: MySuperApp Версия: 1 {[{siteName1 http: // siteUrl1} {siteName2 http: // siteUrl2 5678}]} ' '' – sadlil

ответ

2

ОК, это было довольно глупо ...

Но это может помочь другим.

Ввод значений внутри "" разрешил проблему. например.

name:  "siteName1" 
url:  "http://siteUrl1"