为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go YAML 中封送换行符?

如何在 Go YAML 中封送换行符?

Go
慕村9548890 2022-08-30 22:02:32
在golang CLI中,我正在编程,我收集有关如何配置该工具的信息,并将其作为YAML文件进行marhsal。但是,我不确定如何添加换行符以使文件更具可读性?type Config struct {    Author  string `yaml:"author"`    License string `yaml:"license"`    // Marhsal a line break here    Workspace   string `yaml:"workspace"`    Description string `yaml:"description"`    // Marhsal a line break here    Target string `yaml:"target"`}
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

实现允许格式(和注释)的一种方法是使用模板引擎。


下面是一个运行示例,该示例生成一个带有格式化 yaml 的字符串,然后可以将其保存到文件中。.yml


不需要其他库,模板包含在 go 文件中。


package main


import (

    "bytes"

    "fmt"

    "text/template"

)


type Config struct {

    Author      string

    License     string

    Workspace   string

    Description string

    Target      string

}


const cfg_template = `

conf:

    author: {{ .Author }}

    licence: {{ .License }}


    workspace: {{ .Workspace }}

    description: {{ .Description }}


    # you can even add comments to the template

    target: {{ .Target }}


    # other hardcoded config

    foo: bar


`


func generate(config *Config) string {

    t, err := template.New("my yaml generator").Parse(cfg_template)


    if err != nil {

        panic(err)

    }


    buf := &bytes.Buffer{}

    err = t.Execute(buf, config)


    if err != nil {

        panic(err)

    }


    return buf.String()

}


func main() {

    c := Config{

        Author:      "Germanio",

        License:     "MIT",

        Workspace:   "/home/germanio/workspace",

        Description: "a cool description",

        Target:      "/home/germanio/target",

    }

    yaml := generate(&c)


    fmt.Printf("yaml:\n%s", yaml)

}

结果如下所示:


$ go run yaml_generator.go 

yaml:


conf:

        author: Germanio

        licence: MIT


        workspace: /home/germanio/workspace

        description: a cool description


        # you can even add comments to the template

        target: /home/germanio/target


        # other hardcoded config

        foo: bar

我相信有更好的方法来实现它,只是想展示一个快速的工作示例。


查看完整回答
反对 回复 2022-08-30
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

由于空行在 yaml 中没有含义,因此默认库不会创建它们,也不会在结构字段标记中公开执行此操作的选项。

但是,如果您希望对类型在 yaml 中的封送方式进行细粒度控制,则始终可以通过定义方法使其实现yaml.MarshallerMarshalYAML() (interface{}, error)


查看完整回答
反对 回复 2022-08-30
  • 2 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信