Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

a comparison equals to true, but when i put it as if condition, why it is not evaluated as true?

Tags:

go

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

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

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\n")
}

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.

like image 474
cnkid Avatar asked Aug 30 '15 09:08

cnkid


1 Answers

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

like image 121
HectorJ Avatar answered Nov 19 '22 10:11

HectorJ