Сравнение равно true, но когда я ставлю это как условие, почему он не оценивается как истинный?

a := "ALL"
b := "not all"

if (a == "ALL") != (b == "ALL") {
    fmt.Printf("why not falling into this case?\n")
}

Вот фрагмент кода Go, который я написал, чтобы напечатать что-то, если a и b имеют ровно один, чтобы быть "ВСЕ". Но почему fmt.Printf не запускается?

Однако выполняется следующее:

c := (a == "ALL") != (b == "ALL")
if c {
    fmt.Printf("if assign to c, do fall in here\n")
}

Но какая разница между двумя частями?

Я также вставил вышеуказанный код на игровой площадке go: http://play.golang.org/p/e5tNai_d20 Любое объяснение будет принята с благодарностью! Спасибо заранее.

Ответ 1

Это ошибка 1.5, и выглядит аналогично этому: https://github.com/golang/go/issues/12226

Он фиксируется на главной ветке, поэтому вы можете либо понизить до 1.4.2, либо дождаться следующей версии, либо скомпилировать подсказку мастера.

Изменить: Go1.5.1 был выпущен и содержит исправление к этой проблеме