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

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

Burada yazdığım bir Go kodu parçası, a ve b "ALL" olmak için tam olarak bir tane varsa, bir şey yazdırmak için yazdım. Ama fmt.Printf neden tetiklenmez?Bir karşılaştırma doğruya eşittir, ancak sanki koşulu gibi koydum, neden doğru olarak değerlendirilmiyor?

şu does Ancak baskı:

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

Ama iki parça arasındaki fark nedir?

Ayrıca yukarıdaki kodu oyun alanına da yapıştırdım: http://play.golang.org/p/e5tNai_d20 Herkesin açıklaması büyük takdir edilecektir! Şimdiden teşekkürler.

+0

için düzeltme Neden sadece bir b karşılaştırmak istiyorsunuz içeriyor? – shieldstroy

+1

Bu çalışma: 'if ((a ==" ALL ")! = (B ==" ALL ")) == true {'. Bu garip, bunu açıklayan şartlarda hiçbir şey göremiyorum. –

+0

ALL olmayan tüm dizeleri aynı şekilde ele almak istiyorum. Örneğin. a == "bazı dize", b == "başka bir dize", " – cnkid

cevap

7

Bu 1.5 hata gitmek olduğunu ve similiar görünüyor bu bir: https://github.com/golang/go/issues/12226

Öyle birini yapabilirsiniz bozmak 1.4.2 için, ana dala sabit ve bir sonraki sürüm için bekleyin veya derlemek edilir efendinin ucu.

Düzenleme: Go1.5.1 serbest bırakıldı ve bu konuda

İlgili konular