if-statement - AND 和 OR 的条件检查失败

标签 if-statement go

我正在尝试结合一些条件检查

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

因为actionnil,条件变为false || action.(ActionType) == CollectResourcesAddCountersnil 转换触发 panic

第二个条件变为 false && (action.(ActionType) == CollectAlaramAddToReport || action.(ActionType) == CollectResourcesAddCounters)。导致 false 短路表达式,将不会执行转换。

关于if-statement - AND 和 OR 的条件检查失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55719789/

相关文章:

c++ - 我需要帮助理解这个特定 if 语句的语法的作用

c++ - 赞成/反对 : Initializing a variable in a conditional statement

javascript - 使用javascript检查div是否不存在

oop - 对象变量在 Golang 中没有得到更新

go - 如何为 Gorilla Websocket 编写单元测试用例

curl - 使用相当于curl请求的Go语言上传multipart文件

Go pprof 无法正常工作

python - Python 中的 If 语句(嵌套 boolean 语句)

转到模块 : checksum mismatch

java - 数组 If 语句问题