gpt4 book ai didi

go - 为什么golang yaml头部注释解码后变成脚注释

转载 作者:行者123 更新时间:2023-12-01 20:19:28 30 4
gpt4 key购买 nike

我正在测试 HeadComment从下面的一个非常简单的代码:

package main

import (
"fmt"
"gopkg.in/yaml.v3"
)

type Person struct {
Name *yaml.Node
}

func main() {
nameNode := &yaml.Node{
Kind: yaml.ScalarNode,
HeadComment: "The name of a person",
Value: "Lily",
Style: yaml.DoubleQuotedStyle,
}

person := Person{
Name: nameNode,
}

dataInBytes, _ := yaml.Marshal(person)
fmt.Println(string(dataInBytes))
}

我期待看到这样的输出:
# The name of a person
name: "Lily"

但是,我得到了:
name: "Lily"
# The name of a person

头注释变成脚注释。有人有想法吗?谢谢 !

https://play.golang.org/p/10bQt2KTKBU

最佳答案

发生这种情况是因为该头部注释附加到 YAML 文档树中的值节点(不是 name: ,而是 "Lily" )。

因此,当发出事件时,该评论实际上属于:

name: "Lily"
^-- here

有点道理 go-yaml将值的标题注释放在对的末尾。我将其称为实现,而不是预期的行为,因此您已经与库的作者打开了一张票,以查看他们是否想要更改实现并移动 value 的头部注释,这很好。在 key: valuekey 的标题注释的位置配对相反(我同意,特别是在用于编码结构的情况下,这很有意义并且更方便)。

这是创建相同结构并向 name: 添加头部注释的代码示例关键而不是获得正确的渲染(以丢失漂亮的结构为代价):

func main() {
key := &yaml.Node{
Kind: yaml.ScalarNode,
Value: "name",
HeadComment: "The name of a person",
}
value := &yaml.Node{
Kind: yaml.ScalarNode,
Value: "Lilly",
Style: yaml.DoubleQuotedStyle,
}

mapping := &yaml.Node{
Kind: yaml.MappingNode,
Content: []*yaml.Node{key, value},
}

dataInBytes, _ := yaml.Marshal(mapping)
fmt.Println(string(dataInBytes))
}

输出:
# The name of a person
name: "Lilly"

关于go - 为什么golang yaml头部注释解码后变成脚注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61741453/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com