2016-11-24 22 views
1

我想解析一個我有的小項目的yaml文件。在Go中解析YAML:列表中的地圖

目標是讓應用程序的信息在配置文件中包含服務器文件的地址,以防需要更新。它在一個配置文件中以便於「可編輯性」目的。

最主要的是在應用程序真正開始之前有一些連接測試需要完成。我試圖解析該文件。 它看起來像這樣:

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

給出的文件和代碼在這裏運行的很好。 '''Application:MySuperApp Version:1 {[{siteName1 http:// siteUrl1} {siteName2 http:// siteUrl2 5678}]} ''' – sadlil

回答

2

好的,這是相當愚蠢的...

但它可以幫助他人。

將值放入「」解決了問題。 例如。

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