从任何可用类型转换接口参数

问题描述 投票:0回答:1

我有任务要做: 创建接受接口并返回 *float64 的函数。 Func 应该转换任何类型,可以在不减少的情况下进行转换。

所以我做了这个:

func getValuePtr(val interface{}) (value *float64) {
    switch v := val.(type) {
    case int:
        vv := float64(v)
        value = &vv
    case uint32:
        vv := float64(v)
        value = &vv
    case int32:
        vv := float64(v)
        value = &vv
    case uint64:
        vv := float64(v)
        value = &vv
    case int64:
        vv := float64(v)
        value = &vv
    case float32:
        vv := float64(v)
        value = &vv
    case float64:
        vv := float64(v)
        value = &vv
    }
    return
}

对我来说似乎太复杂了。也许不是:)也许你知道更好的解决方案?

go type-conversion
1个回答
0
投票

您可以使用泛型和约束包:


import "golang.org/x/exp/constraints"

func convertToFloatPtr[T constraints.Integer | constraints.Float](val T) *float64 {
    v := float64(val)
    return &v
}
© www.soinside.com 2019 - 2024. All rights reserved.