在Golang中读取YAML文件

时间:2015-06-19 21:28:28

标签: go yaml

我在阅读YAML文件时遇到问题。我认为它是文件结构中的东西,但我无法弄清楚是什么。

YAML文件:

conf:
  hits:5
  time:5000000

代码:

type conf struct {
    hits int64 `yaml:"hits"`
    time int64 `yaml:"time"`
}


func (c *conf) getConf() *conf {

    yamlFile, err := ioutil.ReadFile("conf.yaml")
    if err != nil {
        log.Printf("yamlFile.Get err   #%v ", err)
    }
    err = yaml.Unmarshal(yamlFile, c)
    if err != nil {
        log.Fatalf("Unmarshal: %v", err)
    }

    return c
}

2 个答案:

答案 0 :(得分:37)

你的yaml文件必须是

display:inline;

您的代码应如下所示:

display :inline-block;

主要错误是结构的大写字母。

答案 1 :(得分:1)

简化的conf.yaml文件:

hits: 5
time: 5000000

main.go文件:

package main

import (
        "fmt"
        "io/ioutil"
        "log"

        "gopkg.in/yaml.v2"
)

type conf struct {
        Hits int64 `yaml:"hits"`
        Time int64 `yaml:"time"`
}

func readConf(filename string) (*conf, error) {
        buf, err := ioutil.ReadFile(filename)
        if err != nil {
                return nil, err
        }

        c := &conf{}
        err = yaml.Unmarshal(buf, c)
        if err != nil {
                return nil, fmt.Errorf("in file %q: %v", filename, err)
        }

        return c, nil
}

func main() {
        c, err := readConf("conf.yaml")
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(c)
}

运行说明(如果这是您第一次退出stdlib):

go mod init example.com/whatever
go get gopkg.in/yaml.v2
cat go.sum
go run .