golang yaml
golang使用yaml格式解析构建配置文件
$ go get gopkg.in/yaml.v2
package main import ( "fmt" "log" "gopkg.in/yaml.v2" ) var data = ` name: cm best_authors: ["ssss","xxxx","yyyy"] desc: age: 25 list: [3, 4] ` type T struct { Name string Authors []string `yaml:"best_authors,flow"` Desc struct { Age int `yaml:"age"` //可省略 List []int `yaml:"list,flow"` } } func main() { t := T{} err := yaml.Unmarshal([]byte(data), &t) fmt.Printf("T:%v\n", t) //修改struct里面的记录 t.Name = "mt" t.Authors = append(t.Authors, "UUUU") t.Desc.Age = 99 fmt.Printf("--- t:\n%v\n\n", t) //转换成yaml字符串类型 d, err := yaml.Marshal(&t) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- t dump:\n%s\n\n", string(d)) }
运行结果
cts@cts-pc:~/test/test1$ ./test1 T:{cm [ssss xxxx yyyy] {25 [3 4]}} --- t: {mt [ssss xxxx yyyy UUUU] {99 [3 4]}} --- t dump: name: mt best_authors: [ssss, xxxx, yyyy, UUUU] desc: age: 99 list: [3, 4]
package main import ( "fmt" "log" "gopkg.in/yaml.v2" ) var data = ` a: Easy! b: c: 2 d: [3, 4] ` // Note: struct fields must be public in order for unmarshal to // correctly populate the data. type T struct { A string B struct { RenamedC int `yaml:"c"` D []int `yaml:",flow"` } } func main() { t := T{} err := yaml.Unmarshal([]byte(data), &t) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- t:\n%v\n\n", t) d, err := yaml.Marshal(&t) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- t dump:\n%s\n\n", string(d)) m := make(map[interface{}]interface{}) err = yaml.Unmarshal([]byte(data), &m) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- m:\n%v\n\n", m) d, err = yaml.Marshal(&m) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- m dump:\n%s\n\n", string(d)) }
运行结果
--- t: {Easy! {2 [3 4]}} --- t dump: a: Easy! b: c: 2 d: [3, 4] --- m: map[a:Easy! b:map[c:2 d:[3 4]]] --- m dump: a: Easy! b: c: 2 d: - 3 - 4

浙公网安备 33010602011771号