首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问map[接口{}]接口{}中的键

如何访问map[接口{}]接口{}中的键
EN

Stack Overflow用户
提问于 2016-08-30 15:48:30
回答 2查看 6.5K关注 0票数 4

这是我的yaml文件:

代码语言:javascript
复制
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文件解压缩为变量:

代码语言:javascript
复制
config := make(map[interface{}]interface{})
yaml.Unmarshal(configFile, &config)

配置值:

代码语言:javascript
复制
map[mysql:map[host:localhost username:root password:mysql]      couchbase:map[host:couchbase://localhost] tablePrefix:tbl]

如何在没有预定义结构类型的情况下访问配置中的db -> mysql ->用户名

EN

回答 2

Stack Overflow用户

发布于 2016-08-30 16:03:16

YAML使用字符串键。你试过:

代码语言:javascript
复制
config := make(map[string]interface{})

若要访问嵌套属性,请使用类型断言

代码语言:javascript
复制
mysql := config["mysql"].(map[string][string])
mysql["host"]

常见的模式是将泛型映射类型化成别名。

代码语言:javascript
复制
type M map[string]interface{}

config := make(M)
yaml.Unmarshal(configFile, &config)
mysql := config["mysql"].(M)
host := mysql["host"].(string)
票数 2
EN

Stack Overflow用户

发布于 2016-08-30 16:31:50

如果不提前定义类型,则需要从遇到的每个断言中选择合适的类型:

代码语言:javascript
复制
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-

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39232012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档