猿问

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

在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"`

}


慕村9548890
浏览 116回答 2
2回答

HUX布斯

实现允许格式(和注释)的一种方法是使用模板引擎。下面是一个运行示例,该示例生成一个带有格式化 yaml 的字符串,然后可以将其保存到文件中。.yml不需要其他库,模板包含在 go 文件中。package mainimport (    "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我相信有更好的方法来实现它,只是想展示一个快速的工作示例。

陪伴而非守候

由于空行在 yaml 中没有含义,因此默认库不会创建它们,也不会在结构字段标记中公开执行此操作的选项。但是,如果您希望对类型在 yaml 中的封送方式进行细粒度控制,则始终可以通过定义方法使其实现yaml.MarshallerMarshalYAML() (interface{}, error)
随时随地看视频慕课网APP

相关分类

Go
我要回答