我想知道我是否可以實現這個函數的不那么冗長的版本。如果它有更好的性能,那就太好了。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 關注
- 116 瀏覽
添加回答
舉報
0/150
提交
取消