Я пытаюсь объединить несколько условных проверок
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 operationType == string(VNFHealthCheck) && action != nil && action.(ActionType) == CollectAlaramAddToReport || action.(ActionType) == CollectResourcesAddCounters {
fmt.Println("Hello, playground", reflect.TypeOf(action))
}
Паника видна с сообщением
паника: преобразование интерфейса: интерфейс {} равен nil, а не main.ActionType
Если проверка условий работает нормально после добавления () вокруг условия ИЛИ
if operationType == string(VNFHealthCheck) && action != nil && (action.(ActionType) == CollectAlaramAddToReport || action.(ActionType) == CollectResourcesAddCounters) {
fmt.Println("Hello, playground", reflect.TypeOf(action))
}
Что может быть причиной поведения.? Я не мог найти никакого объяснения.