2015-08-30 10 views
12
a := "ALL" 
b := "not all" 

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

Oto fragment kodu Go, który napisałem, aby wydrukować coś, jeśli aib mają dokładnie jeden, aby być "ALL". Ale dlaczego fmt.Printf nie jest uruchamiany?porównanie jest równe true, ale kiedy umieszczam je jako warunek, dlaczego nie jest on oceniany jako prawdziwy?

Jednak dodaje robi print:

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

Ale jaka jest różnica między tymi dwoma kawałkami?

Również wkleiłem powyższy kod na plac zabaw: http://play.golang.org/p/e5tNai_d20 Wyjaśnienia każdego będą bardzo mile widziane! Z góry dziękuję.

+0

Dlaczego nie porównasz a do b? – shieldstroy

+1

Działa to: 'if ((a ==" ALL ")! = (B ==" ALL ")) == true {. To dziwne, nie widzę niczego w opisie wyjaśniającym to. –

+0

Chcę traktować wszystkie nie-ALL ciąg jako takie same. na przykład nic nie drukuj, jeśli == "jakiś ciąg", b == "jakiś inny ciąg" – cnkid

Odpowiedz

7

Jest to iść 1.5 błąd i wygląda podobny do tego: https://github.com/golang/go/issues/12226

Mocuje się je na gałęzi głównej, więc można albo downgrade do 1.4.2 i poczekać do następnego wydania, lub skompilować wskazówka mistrza.

Edytuj: Go1.5.1 został wydany i zawiera poprawkę do tego problemu.

Powiązane problemy