-1
如下面的代碼所示,我在interface{}
上做了一些類型切換,以便執行正確的類型切換 - 我試圖將interface{}
轉換爲一個float64
或一個string
,然後將其與一個值進行比較,但是,在float64
上使用除==
之外的比較運算符時,Go會在構建時抱怨它。Golang - 在接口上未定義的比較運算符轉換爲float64
的錯誤轉到吐出如下: -
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)
...這是我的代碼: -
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)
}
}
}
第一:如果'val'是一個'float32',你的類型斷言'val。(float64)'將會發生混亂。第二:比較錯誤很可能來自'subvalue.Value'不是'float64',而是一些'interface {}'。只是在操場上展示一個完整的例子。 – Volker
+1爲遊樂場示例。我將補充說下面的[示例](http://play.golang.org/p/32zgpCizkA)工作正常,所以問題可能是'subval.Value'是一個接口。 – Elwinar
subval.Value確實是一個Interface,我的不好。如果你們中的任何一個想要提交答案,那麼我很樂意將其標記爲「已接受」。 – Ryan