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

Go 一个比较等于真,但当我把它当作条件,为什么它不被评估为真?,go,Go,这是我写的一段Go代码,如果a和b正好有一个“全部”,则打印一些内容。但是为什么不触发fmt.Printf呢 但是,以下内容不会打印: a := "ALL" b := "not all" if (a == "ALL") != (b == "ALL") { fmt.Printf("why not falling into this case?\n") } 但是这两件东西有什么区别呢 我还在围棋场上贴了上面的代码:任何人的解释都将不胜感激!提前感谢。这是一个go 1.5错误,看起来与此类

这是我写的一段Go代码,如果a和b正好有一个“全部”,则打印一些内容。但是为什么不触发fmt.Printf呢

但是,以下内容不会打印:

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

if (a == "ALL") != (b == "ALL") {
    fmt.Printf("why not falling into this case?\n")
}
但是这两件东西有什么区别呢


我还在围棋场上贴了上面的代码:任何人的解释都将不胜感激!提前感谢。

这是一个go 1.5错误,看起来与此类似:

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


编辑:Go1.5.1已经发布,它包含了对这个问题的修复

这是有效的:
if((a==“ALL”)!=(b==“ALL”)==true{
。这很奇怪,我在规范中没有看到任何解释。如果c:=(a==“ALL”)!=(b=“ALL”);c,第二种形式可以简化为
{
一个观察:它对整数的作用与预期的一样。我刚刚询问了golang nuts邮件列表。我们拭目以待。@VladMiller我没有看到我的问题,它可能被隔离了。我只是在我的计算机上进行了测试,我没有问题(go1.4.2 linux/amd64)
c := (a == "ALL") != (b == "ALL")
if c {
    fmt.Printf("if assign to c, do fall in here\n")
}