2015-06-19 86 views
5

阅读YAML文件时遇到问题。我认为这是在文件结构中的东西,但我无法弄清楚什么。阅读Golang中的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 
} 
+1

你正在看到什么错误? –

+0

@AmitKumarGupta我没有得到任何错误,只是空的结构 – MIkCode

+0

你认为这可能是相关的添加到您的问题?另外,你可以粘贴重现问题的完整代码吗? 'package main',你要导入什么文件,'main'函数等,这样对于那些试图帮助你复制粘贴代码并在本地运行的人来说很容易。考虑添加信息和代码,使人们可以轻松地帮助您,因为您希望人们帮助您。 –

回答

14

你的YAML文件必须

hits: 5 
time: 5000000 

你的代码应该是这样的:

package main 

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

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 
} 

func main() { 
    var c conf 
    c.getConf() 

    fmt.Println(c) 
} 

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

+1

关于导出标识符的规范:http://golang.org/doc/go_spec.html#Exported_identifiers – elithrar