我想知道我是否可以实现这个函数的不那么冗长的版本。如果它有更好的性能,那就太好了。func AnyIntToInt(x interface{}) (int, error) { switch val := x.(type) { case int8: return int(val), nil case int16: return int(val), nil case int32: return int(val), nil case int64: return int(val), nil case uint8: return int(val), nil case uint16: return int(val), nil case uint32: return int(val), nil case uint64: return int(val), nil } return 0, ErrNotInteger}我一直在尝试这个,但是它产生了意想不到的结果。func AnyIntToInt(x interface{}) (int, error) { return *(*int)(unsafe.Pointer(&x))}
1 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
问题中的代码是要走的路,但是您可以使用反射包减少代码行:
func AnyIntToInt(x interface{}) (int, error) {
v := reflect.ValueOf(x)
switch v.Kind() {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
return int(v.Int()), nil
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
return int(v.Uint()), nil
}
return 0, ErrNotInteger
}
https://go.dev/play/p/gJ4ASo7AeyN
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消