比较等于true,但当我把它作为条件时,为什么它不被评估为真?

cnk*_*kid 12 go

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

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

这是我写的一段Go代码,如果a和b只有一个是"ALL",则打印一些东西.但为什么没有触发fmt.Printf?

但是下面会打印出来:

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

但这两件之间有什么区别?

我还在go操场上粘贴了上面的代码:http://play.golang.org/p/e5tNai_d20任何人的解释将不胜感激!提前致谢.

Hec*_*orJ 7

这是一个1.5的错误,看起来与这个类似:https://github.com/golang/go/issues/12226

它固定在主分支上,因此您可以降级到1.4.2并等待下一个版本,或者编译master的tip.

编辑:Go1.5.1已发布,它包含此问题的修复程序