2015-06-19 48 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