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

我想知道我是否可以实现这个函数的不那么冗长的版本。如果它有更好的性能,那就太好了。


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))

}


蓝山帝景
浏览 97回答 1
1回答

汪汪一只猫

问题中的代码是要走的路,但是您可以使用反射包减少代码行: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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go