类型断言实现
package main
import (
"fmt"
)
func processWithAssertion(arg interface{}) (interface{}, error) {
if num, ok := arg.(int); ok {
return num * num, nil
} else if str, ok := arg.(string); ok {
return len(str), nil
} else if slice, ok := arg.([]interface{}); ok {
return len(slice), nil
}
return nil, fmt.Errorf("unsupported type")
}
类型分支实现
package main
import (
"fmt"
)
func processWithTypeSwitch(arg interface{}) (interface{}, error) {
switch v := arg.(type) {
case int:
return v * v, nil
case string:
return len(v), nil
case []interface{}:
return len(v), nil
default:
return nil, fmt.Errorf("unsupported type")
}
}
优缺点对比
- 类型断言:
- 优点:代码相对简洁,对于简单的类型判断场景,代码量较少。
- 缺点:需要多次手动进行类型断言,代码可读性较差,且如果需要处理的类型较多,代码会变得冗长且容易出错。
- 类型分支:
- 优点:代码结构清晰,可读性强,对于多种类型的处理一目了然,维护方便。
- 缺点:相较于简单的类型断言,代码量会稍多一些,但在复杂场景下这点劣势不明显。