这是我的yaml文件:
io.on('connection', function(socket) {
socketID = socket.client.id;
socket.join(socketID);
console.log('a user connected ' + socketID);
});
我使用go-yaml库将yaml文件解组为变量:
db:
# table prefix
tablePrefix: tbl
# mysql driver configuration
mysql:
host: localhost
username: root
password: mysql
# couchbase driver configuration
couchbase:
host: couchbase://localhost
配置值:
config := make(map[interface{}]interface{})
yaml.Unmarshal(configFile, &config)
如何访问 db - > mysql - >没有预定义结构类型的配置中的用户名值
答案 0 :(得分:1)
YAML使用字符串键。你试过了吗?
config := make(map[string]interface{})
要访问嵌套属性,请使用type assertions。
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)
答案 1 :(得分:0)
如果您未提前定义类型,则需要assert来自您遇到的每个interface{}
的正确类型:
if db, ok := config["db"].(map[interface{}]interface{}); ok {
if mysql, ok := db["mysql"].(map[interface{}]interface{}); ok {
username := mysql["username"].(string)
// ...
}
}