这是我的 yaml 文件:db: # table prefix tablePrefix: tbl # mysql driver configuration mysql: host: localhost username: root password: mysql # couchbase driver configuration couchbase: host: couchbase://localhost我使用 go-yaml 库将 yaml 文件解组为变量:config := make(map[interface{}]interface{})yaml.Unmarshal(configFile, &config)配置值:map[mysql:map[host:localhost username:root password:mysql] couchbase:map[host:couchbase://localhost] tablePrefix:tbl]如何在没有预定义结构类型的情况下访问db -> mysql -> 配置中的用户名值
2 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
如果您没有提前定义类型,则需要从遇到的每个类型中断言正确的类型:interface{}
if db, ok := config["db"].(map[interface{}]interface{}); ok {
if mysql, ok := db["mysql"].(map[interface{}]interface{}); ok {
username := mysql["username"].(string)
// ...
}
}
https://play.golang.org/p/koSugTzyV-
Cats萌萌
TA贡献1805条经验 获得超9个赞
YAML 使用字符串键。你有没有尝试过:
config := make(map[string]interface{})
要访问嵌套属性,请使用类型断言。
mysql := config["mysql"].(map[string][string])
mysql["host"]
一种常见的模式是给通用映射类型起别名。
type M map[string]interface{}
config := make(M)
yaml.Unmarshal(configFile, &config)
mysql := config["mysql"].(M)
host := mysql["host"].(string)
- 2 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消