Golang - Vergleich-operator nicht definiert-Schnittstelle umgewandelt float64

Wie im code gezeigt unten, ich mache einige geben die Umschaltung auf eine interface{} um den richtigen Typ switching - ich bin versucht zu konvertieren, die interface{} entweder eine float64 oder eine string und dann den Vergleich zu einem Wert, jedoch, wenn Sie eine Vergleich anderen operator als == auf die float64's, Gehen Sie beschwert sich beim Bau.

Den Fehler Gehen ausspuckt, sind wie folgt :-

invalid operation: (interface {})(val.(float64)) > subval.Value (operator > not defined on interface)
invalid operation: (interface {})(val.(float64)) >= subval.Value (operator >= not defined on interface)
invalid operation: (interface {})(val.(float64)) < subval.Value (operator < not defined on interface)
invalid operation: (interface {})(val.(float64)) <= subval.Value (operator <= not defined on interface)

...und das ist mein code:-

val:= s.FieldByName(subval.Metric).Interface()
switch val(type) {
case float64, float32, int:
    switch subval.Type {
    case "greater_than":
        if val.(float64) > subval.Value {
            runAction(subval.Action, Config)
        }
    case "greater_than_or_equal_to":
        if val.(float64) >= subval.Value {
            runAction(subval.Action, Config)
        }
    case "equal_to":
        if val.(float64) == subval.Value {
            runAction(subval.Action, Config)
        }
    case "less_than":
        if val.(float64) < subval.Value {
            runAction(subval.Action, Config)
        }
    case "less_than_or_equal_to":
        if val.(float64) <= subval.Value {
            runAction(subval.Action, Config)
        }
    }
case string:
    if subval.Type == "equal_to" {
        if val.(string) == subval.Value {
            runAction(subval.Action, Config)
        }
    }
}
  • Erstens: die Art Ihrer Geltendmachung val.(float64) in Panik geraten, wenn val ist ein float32. Zweitens: Der Vergleich Fehler wahrscheinlich subvalue.Value nicht float64 aber einige interface{}. Nur zeigen ein vollständiges Beispiel auf dem Spielplatz.
  • +1 für den Spielplatz Beispiel. Ich will hinzufügen, dass die folgenden Beispiel funktioniert einwandfrei, das problem ist also wahrscheinlich der subval.Value wird eine Schnittstelle.
  • subval.Der Wert war in der Tat ein Interface, meine bad. Wenn Sie zwei möchten, senden Sie eine Antwort-dann werde ich gerne daneben ist als Angenommen.
  • es ist getan.
InformationsquelleAutor Ryan | 2014-07-02
Schreibe einen Kommentar