为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法在golang中使用不安全的指针来实现这个整数转换函数?

有没有办法在golang中使用不安全的指针来实现这个整数转换函数?

Go
蓝山帝景 2022-10-17 19:26:09
我想知道我是否可以实现这个函数的不那么冗长的版本。如果它有更好的性能,那就太好了。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


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信