我正在尝试结合一些条件检查
package main
import (
"fmt"
"reflect"
)
type ActionType string
const (
VNFHealthCheck ActionType = "vnf-health-check"
CollectAlaramAddToReport ActionType = "write-initial-report"
CollectResourcesAddCounters ActionType = "abc"
)
func main() {
var action, operationType interface{}
action = nil
operationType = "vnf-health-check"
if operationType == string(VNFHealthCheck) && action != nil && action.(ActionType) == CollectAlaramAddToReport {
fmt.Println("Type is ", reflect.TypeOf(action))
}
}
上面的代码没有打印任何内容,因为 action != nil 检查失败。
但是当 if 条件变为
if operationType == string(VNFHealthCheck) && action != nil && action.(ActionType) == CollectAlaramAddToReport || action.(ActionType) == CollectResourcesAddCounters {
fmt.Println("Hello, playground", reflect.TypeOf(action))
}
消息显示 panic panic :接口(interface)转换:interface {} 为 nil,不是 main.ActionType
如果在 OR 条件周围添加 () 后条件检查工作正常
if operationType == string(VNFHealthCheck) && action != nil && (action.(ActionType) == CollectAlaramAddToReport || action.(ActionType) == CollectResourcesAddCounters) {
fmt.Println("Hello, playground", reflect.TypeOf(action))
}
行为的原因可能是什么。?我找不到任何解释。
最佳答案
&&
的优先级高于 ||
在第一种情况下,
operationType == string(VNFHealthCheck) && action != nil && action.(ActionType) == CollectAlaramAddToReport || action.(ActionType) == CollectResourcesAddCounters
因为action
为nil
,条件变为false || action.(ActionType) == CollectResourcesAddCounters
。 nil
转换触发 panic
第二个条件变为 false && (action.(ActionType) == CollectAlaramAddToReport || action.(ActionType) == CollectResourcesAddCounters)
。导致 false
短路表达式,将不会执行转换。
关于if-statement - AND 和 OR 的条件检查失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55719789/