你如何在Go YAML中组织一次换行?

你如何在Go YAML中组织一次换行?,go,yaml,command-line-interface,Go,Yaml,Command Line Interface,在golang CLI中,我正在编程,我收集有关如何配置该工具的信息,并将其作为YAML文件保存。但是,我不确定如何添加换行符以使文件更具可读性 type Config struct { Author string `yaml:"author"` License string `yaml:"license"` // Marhsal a line break here Workspace string `yaml:&qu

在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中没有意义,默认库不会创建它们,也不会在struct field标记中公开这样做的选项


但是,如果您想要细粒度地控制类型在yaml中的封送方式,则始终可以通过定义方法
marshallyaml()(接口{},错误)

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

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

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

主程序包
进口(
“字节”
“fmt”
“文本/模板”
)
类型配置结构{
作者字符串
许可证字符串
工作区字符串
描述字符串
目标字符串
}
const cfg_模板=`
形态:
作者:{{.author}
许可证:{{.License}
工作区:{{.workspace}
描述:{{.description}
#您甚至可以向模板添加注释
目标:{{.target}
#其他硬编码配置
福:酒吧
`
func生成(配置*配置)字符串{
t、 err:=template.New(“我的yaml生成器”).Parse(cfg_模板)
如果错误!=零{
恐慌(错误)
}
buf:=&bytes.Buffer{}
err=t.Execute(buf,config)
如果错误!=零{
恐慌(错误)
}
返回buf.String()
}
func main(){
c:=Config{
作者:“日耳曼人”,
许可证:“麻省理工学院”,
工作区:“/home/germanio/Workspace”,
描述:“一个很酷的描述”,
目标:“/home/germanio/Target”,
}
yaml:=生成(&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

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

CLI生成一个配置文件,并且您希望它包含分隔某些段的空格?让他们在不同的父母手下如何?如
Config>group1>作者、许可证
<代码>配置>组2>工作区、说明,等等…YAML是结构化数据的表示形式–您输入结构化数据,然后输出该数据的YAML表示形式。额外的换行符不会影响YAML文件的结构化语义。因此,您不能表示希望创建换行符作为序列化数据结构的一部分
yaml.v3
确实允许您添加带有空引号的行(
#
),但我郑重建议不要这样做。如果你想精确控制数据的表示,YAML对你来说简直是个错误的工具。@germanio是的,模板引擎怎么样?模板引擎可以工作。我还不太熟悉围棋生态系统@德国佬,你有什么建议?