在Go中解析YAML:在列表中进行映射

时间:2016-11-24 09:58:29

标签: parsing go yaml

我试图为我的小项目解析一个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
{[]}

我错过了什么?

1 个答案:

答案 0 :(得分:2)

好的,这真是太愚蠢......

但它可以帮助别人。

将值放在" "解决了这个问题。 例如。

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