首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将struct的内容写入yml文件

将struct的内容写入yml文件
EN

Stack Overflow用户
提问于 2020-12-08 21:26:52
回答 1查看 1.2K关注 0票数 1

我的结构如下所示

代码语言:javascript
复制
type config struct{
    version int
    mapping map[string]string
}

我想把上面的结构的内容写到一个yml文件中。

我试过了,但没有运气。

代码语言:javascript
复制
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
}

是否有实现这一目标的库/方法?谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-08 22:14:47

这个库应该可以帮助您获得所需的东西:https://github.com/go-yaml/yaml

这方面的一个要求是导出配置结构的成员(大写名称)。

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

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
version: 7
mapping:
  key: value
  key2: value2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65207143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档