【问题标题】:Writing the contents of a struct to yml file将结构的内容写入 yml 文件
【发布时间】:2020-12-08 21:26:52
【问题描述】:

我有一个像下面这样的结构

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
}

是否有图书馆/方法来实现这一目标?谢谢!

【问题讨论】:

    标签: go yaml


    【解决方案1】:

    这个库应该可以帮助你得到你需要的东西:https://github.com/go-yaml/yaml

    对此的要求是导出配置结构的成员(大写名称)。

    这是您的结构定义的一个简短示例:

    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 的成员设为公开。使用编码器可以为您节省一些额外的代码。
    • 酷。谢谢!
    猜你喜欢
    • 2017-05-17
    • 1970-01-01
    • 2021-10-23
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2010-11-09
    • 2016-09-28
    相关资源
    最近更新 更多