为了账号安全,请及时绑定邮箱和手机立即绑定

如何访问 map[interface{}] interface{} 中的键

如何访问 map[interface{}] interface{} 中的键

Go
隔江千里 2022-03-07 16:02:52
这是我的 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-


查看完整回答
反对 回复 2022-03-07
?
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)


查看完整回答
反对 回复 2022-03-07
  • 2 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信