我试图在Yaml中传递符文参数,如下所示:
CsvDelimiter: ';'然后我将yaml解析为struct。
type Params struct {
...
CsvDelimiter rune `yaml: "CsvDelimiter"`
...
}但是Params.CsvDelimiter是空的
如何正确地从Yaml传递符文参数?
发布于 2021-07-05 17:46:20
YAML解组器不知道如何处理一个符文,但是您可以像这样从字符串中提取一个符文。
package main
import (
"fmt"
"gopkg.in/yaml.v2"
)
type Params struct {
CsvDelimiter string `yaml:"CsvDelimiter"`
}
func main() {
str := `CsvDelimiter: ';'`
params := Params{}
err := yaml.Unmarshal([]byte(str), ¶ms)
if err != nil {
panic(err)
}
fmt.Println(rune(params.CsvDelimiter[0]))
}发布于 2021-07-05 17:57:19
假设您使用的是gopkg.in/yaml.v3包,您可以声明一个自定义rune类型,并让它实现Unmarshaler接口。
type Rune rune
func (r *Rune) UnmarshalYAML(n *yaml.Node) error {
var s string
if err := n.Decode(&s); err != nil {
return err
}
rn, _ := utf8.DecodeRune([]byte(s))
*r = Rune(rn)
return nil
}https://stackoverflow.com/questions/68260117
复制相似问题