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

这是我的 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 -> 配置中的用户名值


隔江千里
浏览 164回答 2
2回答

婷婷同学_

如果您没有提前定义类型,则需要从遇到的每个类型中断言正确的类型: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萌萌

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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go