我想在yaml中生成以下内容:
rom PyQt5.QtWidgets import *
在Golang中,但是进行以下示例,我得到以下输出:
- bar: hello
- bar: another
pint: guiness
- bar: second
pint: ""
似乎YAML Golang解析器将结构名放在它生成的YAML中,例如- bar:
- bar: hello
- bar: another
pint: guiness
- bar:
- bar: second
pint: ""
,然后在其下放置成员数组。我不想要那样,因为它会破坏其他东西。
- bar:
我想知道是否有一种方法可以像第一个示例那样生成它?
即使这意味着我必须使用另一个YAML库。
答案 0 :(得分:0)
看看这个例子:
talent_ability: talent_abilities.pluck(:name).join(' ')
输出:
package main
import (
"fmt"
"log"
yaml "gopkg.in/yaml.v2"
)
type T struct {
Bar string `yaml:"bar,omitempty"`
Pint string `yaml:"pint,omitempty"`
}
func main() {
var t = make([]T, 3)
t[0].Bar = "hello"
t[1].Bar = "another"
t[1].Pint = "guiness"
t[2].Bar = "second"
y, err := yaml.Marshal(t)
if err != nil {
log.Fatalf("Marshal: %v", err)
}
fmt.Println(string(y))
}
如果您希望将空字符串保留在所需的输出中,则可以这样做
- bar: hello
- bar: another
pint: guiness
- bar: second
输出:
package main
import (
"fmt"
"log"
yaml "gopkg.in/yaml.v2"
)
type S string
func (s *S) IsZero() bool {
return false
}
type T struct {
Bar string `yaml:"bar,omitempty"`
Pint *S `yaml:"pint,omitempty"`
}
func main() {
var t = make([]T, 3)
t[0].Bar = "hello"
t[1].Bar = "another"
p1 := S("guiness")
t[1].Pint = &p1
t[2].Bar = "second"
p2 := S("")
t[2].Pint = &p2
y, err := yaml.Marshal(t)
if err != nil {
log.Fatalf("Marshal: %v", err)
}
fmt.Println(string(y))
}
有关yaml软件包的更多信息:https://godoc.org/gopkg.in/yaml.v2