Umwandeln unbekannte Schnittstelle zu float64 in Golang

So, ich erhalte eine Schnittstelle{}, aber ich möchte in jeder möglichen Weise zu konvertieren, um ein float64 oder einen Fehler zurückgeben, falls nicht möglich.

Hier ist, was ich Tue:

func getFloat(unk interface{}) (float64, error) {
    if v_flt, ok := unk.(float64); ok {
        return v_flt, nil
    } else if v_int, ok := unk.(int); ok {
        return float64(v_int), nil
    } else if v_int, ok := unk.(int16); ok {
        return float64(v_int), nil
    } else ... //other integer types
    } else if v_str, ok := unk.(string); ok {
        v_flt, err := strconv.ParseFloat(v_str, 64)
        if err == nil {
            return v_flt, nil
        }
        return math.NaN(), err
    } else if unk == nil {
        return math.NaN(), errors.New("getFloat: unknown value is nil")
    } else {
        return math.NaN(), errors.New("getFloat: unknown value is of incompatible type")
    }
}

Aber ich fühle mich wie ich über Sie gehen den falschen Weg, gibt es einen besseren Weg, dies zu tun?

InformationsquelleAutor Rhaokiel | 2013-12-24
Schreibe einen Kommentar