我有任务要做: 创建接受接口并返回 *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
}
对我来说似乎太复杂了。也许不是:)也许你知道更好的解决方案?
您可以使用泛型和约束包:
import "golang.org/x/exp/constraints"
func convertToFloatPtr[T constraints.Integer | constraints.Float](val T) *float64 {
v := float64(val)
return &v
}