2013-04-02 18 views
10

Git, if ifadesinde bir yapının başlatılmasıyla ilgili şikayetler. Niye ya? Geçici değişkenler veya yeni işlevler içermeyen bunun için doğru sözdizimi var mı?Neden bir if deyiminde struct creation öğesi Go'da yasa dışıdır?

type Auth struct { 
    Username string 
    Password string 
} 

func main() { 
    auth := Auth { Username : "abc", Password : "123" } 

    if auth == Auth {Username: "abc", Password: "123"} { 
     fmt.Println(auth) 
    } 
} 

Hatası (if-ifadesi hattı üzerine): bekliyor: = veya = veya virgül

Bu aynı hata verir:

if auth2 := Auth {Username: "abc", Password: "123"}; auth == auth2 { 
      fmt.Println(auth) 
} 

Bu gibi çalışır sözdizimi hatası: Beklenmeyen bekleniyor:

auth2 := Auth {Username: "abc", Password: "123"}; 
if auth == auth2 { 
     fmt.Println(auth) 
} 

cevap

19

== Sağ tarafını parantez içine almanız gerekir. Aksi takdirde gitmek, '{' 'if' bloğunun başlangıcı olduğunu düşünecektir. Aşağıdaki kod iyi çalışır:

tamlık hatırına
package main 

import "fmt" 

type Auth struct { 
    Username string 
    Password string 
} 

func main() { 
    auth := Auth { Username : "abc", Password : "123" } 
    if auth == (Auth {Username: "abc", Password: "123"}) { 
     fmt.Println(auth) 
    } 
} 

// Output: {abc 123} 
+8

: eğer "LiteralType bileşik bir hazır kullanılarak typename bir şekilde anahtar kelime ve bir blok açılış destek arasındaki görüntülendiğinde bir ayrıştırma belirsizlik ortaya çıkan ve '', "for" veya "switch" deyimi, çünkü literaldeki ifadeleri çevreleyen parantezler, deyim bloğunu tanıtanlarla karıştırılır. Bu nadir durumda belirsizliği gidermek için, bileşik yazım parantez içinde görünmelidir. " - http://golang.org/ref/spec – mna

İlgili konular