如何重写以下代码?switch md.(type) { case *amf0.EcmaArrayType: ea := md.(*amf0.EcmaArrayType) for k, v := range (*ea) { log.Printf("%v = %v\n", k, v) } if width == 0 {width = uint16((*ea)["width"].(amf0.NumberType))} if height == 0 {height = uint16((*ea)["height"].(amf0.NumberType))} case *amf0.ObjectType: ea := md.(*amf0.ObjectType) for k, v := range (*ea) { log.Printf("%v = %v\n", k, v) } if width == 0 {width = uint16((*ea)["width"].(amf0.NumberType))} if height == 0 {height = uint16((*ea)["height"].(amf0.NumberType))}}它具有两个完全相同的块,用于不同类型。如果我声明了var ea interface{}上述开关状态,则range (*ea)由于编译错误而无法调用。
3 回答
慕沐林林
TA贡献2016条经验 获得超9个赞
在调用范围之前使用类型强制转换,例如
range ((* your_desired_type)(*ea))
your_desired_type
用您的实际类型替换,以进行类型转换。
- 3 回答
- 0 关注
- 174 浏览
添加回答
举报
0/150
提交
取消