代码之家  ›  专栏  ›  技术社区  ›  user25265096

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

  •  -1
  • user25265096  · 技术社区  · 1 年前

    我有任务要做: 生成接受接口并返回*float64的func。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
    }
    

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

    1 回复  |  直到 1 年前
        1
  •  0
  •   eik    1 年前

    一个简单的解决方案是

    func getValuePtr(val any) *float64 {
        if v, ok := val.(float64); ok {
            return &v
        }
    
        return nil
    }
    

    Try it 在围棋赛场上。

        2
  •  -1
  •   alirezaarzehgar    1 年前

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

    
    import "golang.org/x/exp/constraints"
    
    func convertToFloatPtr[T constraints.Integer | constraints.Float](val T) *float64 {
        v := float64(val)
        return &v
    }