Idź narzeka na tworzenie instancji w instrukcji if. Czemu? Czy jest w tym poprawna składnia, która nie zawiera zmiennych tymczasowych lub nowych funkcji?Dlaczego tworzenie struktury w instrukcji if jest nielegalne w Go?
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)
}
}
Error (po if-oświadczenie linia): błąd składni: niespodziewany: oczekując: = lub = lub przecinek
Daje to ten sam błąd:
if auth2 := Auth {Username: "abc", Password: "123"}; auth == auth2 {
fmt.Println(auth)
}
To działa jak oczekiwano:
auth2 := Auth {Username: "abc", Password: "123"};
if auth == auth2 {
fmt.Println(auth)
}
kompletności boską: „To parsowania dwuznaczność powstaje, gdy pojawi się kompozyt dosłowny za pomocą formularza TypeName z LiteralType pomiędzy kluczowym i nawiasu otwierającego blokowy«jeśli», Instrukcja "dla" lub "przełączania", ponieważ nawiasy otaczające wyrażenia w dosłownym są mylone z tymi, które wprowadzają blok instrukcji. Aby rozwiązać niejednoznaczność w tym rzadkim przypadku, literał złożony musi pojawić się w nawiasach. " - http://golang.org/ref/spec – mna