我有一个解码器函数,它接受一个字节切片reflect.Kind
并返回一个接口和一个错误。当在代码的其他部分使用该接口时,该接口将被断言。有没有办法简化我的 switch 语句,这样我就不必在每种情况下重复 NewReader、Read 和错误处理?
我现在拥有的:
func decoder(byteValue []byte, t reflect.Kind) (interface{}, error) {
switch t {
case reflect.Int16:
var ret int16
buf := bytes.NewReader(byteValue)
err := binary.Read(buf, binary.BigEndian, &ret)
if err != nil {
return 0, err
}
return ret, nil
case reflect.Int32:
var ret int32
buf := bytes.NewReader(byteValue)
err := binary.Read(buf, binary.BigEndian, &ret)
if err != nil {
return 0, err
}
return ret, nil
}
}
我在找什么:
func decoder(byteValue []byte, t reflect.Kind) (interface{}, error) {
switch t {
case reflect.Int16:
var ret int16
case reflect.Int32:
var ret int32
}
buf := bytes.NewReader(byteValue)
err := binary.Read(buf, binary.BigEndian, &ret)
if err != nil {
return ret, err
}
return ret, nil
}
我知道这不会起作用,因为ret
仅在 switch 案例的范围内定义并且在它之外丢失了。