2 回答
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
我相信有更好的方法来实现它,只是想展示一个快速的工作示例。
TA贡献1757条经验 获得超8个赞
由于空行在 yaml 中没有含义,因此默认库不会创建它们,也不会在结构字段标记中公开执行此操作的选项。
但是,如果您希望对类型在 yaml 中的封送方式进行细粒度控制,则始终可以通过定义方法使其实现yaml.Marshaller
MarshalYAML() (interface{}, error)
- 2 回答
- 0 关注
- 115 浏览
添加回答
举报