将结构编组到yaml时,Golang如何避免键“on”上的双引号

我有一个简单的结构,例如:

type Foo struct {
    On string `yaml:"on"`}

并希望以任何一种方式将此结构编组为 YAML 字符串

始终在键“on”上使用双引号得到相同的结果

"on": hello

我怎样才能避免这种情况?以下是我想要的结果

on: hello

go的版本是go1.17.2 darwin/amd64


鸿蒙传说
浏览 126回答 1
1回答

qq_笑_17

这将是无效的 YAML1.1(或至少令人困惑),因为on关键字被解释为布尔值true(请参阅YAML1.1 规范)。根据go-yaml 文档:yaml 包支持 YAML 1.2 的大部分内容,但保留了 1.1 中的一些行为以实现向后兼容性。具体来说,从 yaml 包的 v3 开始:只要将 YAML 1.1 布尔值(是/否,开/关)解码为类型化的布尔值,它们就受支持。否则,它们表现为字符串。YAML 1.2 中的布尔值仅是真/假。如果您更改yaml:"on"为其他任何内容,例如yaml:"foo"key 将不会被引用。type T struct {    On  string `yaml:"on"`    Foo string `yaml:"foo"`}func main() {    t := T{        On:  "Hello",        Foo: "world",    }    b, _ := yaml.Marshal(&t)    fmt.Println(string(b))}// "on": hello// foo: world
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go