比较等于true,但是当我将其视为条件时,为什么不将其评估为true?

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

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

Here is a piece of Go code I wrote, to print something if a and b have exactly one to be "ALL". But why the fmt.Printf is not triggered?

However the following does print:

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

But what's the difference between the two pieces?

I also pasted the above code in the go playground: http://play.golang.org/p/e5tNai_d20 Anyone's explanation will be greatly appreciated! Thanks in advance.

It is a go 1.5 bug, and looks similiar to this one : https://github.com/golang/go/issues/12226

It is fixed on the master branch, so you can either downgrade to 1.4.2 and wait for the next release, or compile the tip of master.

Edit : Go1.5.1 has been released and it contains the fix to this issue