go-yaml 的默认 map 类型是 map[any]any
Go 语言的 yaml 库 <github.com/go-yaml/yaml> 的默认 map 类型是 map[any]any
,而不是 map[string]any
。
V2 代码:https://github.com/go-yaml/yaml/blob/v2/decode.go#L241 V3 代码:https://github.com/go-yaml/yaml/blob/v3/decode.go#L334
因此,当使用这个库对 yaml 内容进行 unmarshal 的时候,由 go-yaml 自动创建的 map 的类型是 map[any]any
:
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v2"
)
var content = `
storage:
settings:
fs:
ad:
username: admin
ldap:
password: password
`
type Storage struct {
Settings map[string]any `yaml:"settings"`
}
type Config struct {
Storage *Storage `yaml:"storage"`
}
func main() {
c := new(Config)
err := yaml.Unmarshal([]byte(content), c)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%T\n", c.Storage.Settings["fs"])
}
上面代码的输出是:
❯ go run testcmd.go
map[interface {}]interface {}
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。