猿问

键入强制转换问题

如何重写以下代码?


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)由于编译错误而无法调用。


慕姐4208626
浏览 175回答 3
3回答

慕沐林林

在调用范围之前使用类型强制转换,例如     range ((* your_desired_type)(*ea))your_desired_type用您的实际类型替换,以进行类型转换。
随时随地看视频慕课网APP

相关分类

Go
我要回答