Go 将结构的内容写入yml文件

Go 将结构的内容写入yml文件,go,yaml,Go,Yaml,我有一个如下的结构 type config struct{ version int mapping map[string]string } 我想将上述结构的内容写入Go中的yml文件 我试过了,但运气不好 func writeConfig(c *config) error { d, err := yaml.Marshal(c) if err != nil { return err } home, err := os.UserHom

我有一个如下的结构

type config struct{
    version int
    mapping map[string]string
}
我想将上述结构的内容写入Go中的yml文件

我试过了,但运气不好

func writeConfig(c *config) error {
    d, err := yaml.Marshal(c)
    if err != nil {
        return err
    }
    home, err := os.UserHomeDir()
    if err != nil {
        return err
    }
    configpath := filepath.FromSlash(home + "/abc/config.yml")

    // Open file using READ & WRITE permission.
    file, err := os.OpenFile(configpath, os.O_RDWR, 0644)
    if err != nil {
        return err
    }
    defer file.Close()

    // Write some text line-by-line to file.
    _, err = file.WriteString(string(d))
    if err != nil {
        return err
    }

    // Save file changes.
    err = file.Sync()
    if err != nil {
        return err
    }
    return nil
}

是否有实现此目标的库/方法?谢谢大家!

此库可以帮助您获得所需的:

需要导出配置结构的成员(大写名称)

下面是结构定义的一个简短示例:

package main

import (
    "log"
    "os"

    "gopkg.in/yaml.v2"
)

type config struct {
    Version int
    Mapping map[string]string
}

func main() {

    file, err := os.OpenFile("test.yml", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
    if err != nil {
        log.Fatalf("error opening/creating file: %v", err)
    }
    defer file.Close()

    enc := yaml.NewEncoder(file)

    err = enc.Encode(config{
        Version: 7,
        Mapping: map[string]string{
            "key":  "value",
            "key2": "value2",
        },
    })
    if err != nil {
        log.Fatalf("error encoding: %v", err)
    }

}
这将产生以下yaml文件:

version: 7
mapping:
  key: value
  key2: value2

注意:对于更新的示例代码:
yaml.Marshal
也可以工作,如果您将
config
的成员设置为公共的。使用编码器可以节省一些额外的代码。酷。非常感谢。