代码之家  ›  专栏  ›  技术社区  ›  AleÅ¡

使用golang解码/编码来自yaml的多行字符串字段

  •  0
  • AleÅ¡  · 技术社区  · 6 年前

    yaml文件可以包含带有“多行字符串”数据的字段。下面的例子:

    Data:
      Foo: |
        enemies=aliens
        lives=3
        enemies.cheat=true
        enemies.cheat.level=noGoodRotten
    

    我怎样才能正确的编码和解码这些在戈兰和应该是什么类型的 Data 字段, map[string][]byte 是吗?

    我试过:

    import (
        yamlv2 "gopkg.in/yaml.v2"
    )
    
    type data struct {
      Data map[string][]byte
    }
    
    func decode(bytes []byte) (*data, error) {
      d := &data{}
    
      err := yamlv2.Unmarshal(bytes, d)
      if err != nil {
        return nil, err
      }
      return d, nil
    }
    

    也见 Playground .

    1 回复  |  直到 6 年前
        1
  •  1
  •   W.K.S    6 年前

    您将以与普通字符串相同的方式分析多行字符串:

    package main
    
    import (
        "fmt"
        "gopkg.in/yaml.v2"
        "log"
    )
    
    var yamlString = `
    Data:
      Foo: |
        enemies=aliens
        lives=3
        enemies.cheat=true
        enemies.cheat.level=noGoodRotten`
    
    type data struct {
        Data map[string]string `yaml:"Data"`
    }
    
    func main() {
        t := data{}
    
        err := yaml.Unmarshal([]byte(yamlString), &t)
        if err != nil {
            log.Fatalf("error: %v", err)
        }
    
        if foo, ok := t.Data["Foo"]; ok {
            fmt.Printf("--- t:\n%v\n\n", foo)
        }
    }