你如何在 Go YAML 中编组换行符?
How do you marshal a line break in Go YAML?
在 golang CLI 中,我正在编程,我收集有关如何配置该工具的信息,并将其编组为 YAML 文件。但是,我不确定如何添加换行符以使文件更具可读性?
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"`
}
由于空行在 yaml 中没有意义,默认库不会创建它们,并且不会在结构字段标记中公开这样做的选项。
但是,如果您想要细粒度地控制类型在 yaml 中的编组方式,您始终可以通过定义方法 MarshalYAML() (interface{}, error)
使其实现 yaml.Marshaller
一种允许格式(和注释)的实现方法是使用模板引擎。
这是一个 运行 示例,它生成一个带有格式化 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
我相信有更好的方法来实现它,只是想展示一个快速的工作示例。
在 golang CLI 中,我正在编程,我收集有关如何配置该工具的信息,并将其编组为 YAML 文件。但是,我不确定如何添加换行符以使文件更具可读性?
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"`
}
由于空行在 yaml 中没有意义,默认库不会创建它们,并且不会在结构字段标记中公开这样做的选项。
但是,如果您想要细粒度地控制类型在 yaml 中的编组方式,您始终可以通过定义方法 MarshalYAML() (interface{}, error)
yaml.Marshaller
一种允许格式(和注释)的实现方法是使用模板引擎。
这是一个 运行 示例,它生成一个带有格式化 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
我相信有更好的方法来实现它,只是想展示一个快速的工作示例。