返回信息流使用go语言的go-yaml包解析yml文件,官方给的例子是假设已经确定yml基本内容然后设计结构体进行unmarshel
type T struct {
A string
B struct {
RenamedC int `yaml:"c"`
D []int `yaml:",flow"`
}
}
然后:
t := T{}
err := yaml.Unmarshal([]byte(data), &t)
但实际使用中,很难得知yml的基本格式,可能嵌套了好几层:
floor_1:
floor_2_a:
type:test
floor_2_b:
type:test
网上的一个方法是声明t的类型为map[string]interface{}
然后unmarshel出来
interface{}的类型变成了map[interface{}] interface{}
结果这个map不能用range,提示key值为interface时无法遍历
也无法强转成map[string] interface{},因为强转必须使用断言,但是断言结果是map[interface{}]interface,根本不让改
想请教下如何遍历map[interface{}] interface{},现在处于只能看看打印,里边内容根本用不上的情况
这是一条镜像帖。来源:北邮人论坛 / golang / #926同步于 2017/12/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖
关于使用map[interface{}] interface{}
wyliewylie
2017/12/5镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
因为其他组件都是go的,希望统一用go语言.
功能类似docker swarm使用yml编排容器
目前临时解决方案确实是使用了python...一个dict搞定,感动
【 在 novagforce 的大作中提到: 】
: 用reflect转?
: 不过为什么一定要在静态类型的语言上搞RTTI呢?有这种需求不如直接用Python。
嗯reflect可以。
大概
val := reflect.ValueOf(v)
if val.Type().Kind() == reflect.Map {
for _, k := range val.MapKeys() {
val.MapIndex(k).Interface()
}
}
就行
【 在 wyliewylie 的大作中提到: 】
: 使用go语言的go-yaml包解析yml文件,官方给的例子是假设已经确定yml基本内容然后设计结构体进行unmarshel
: type T struct {
: A string
: ...................