Подтвердить что ты не робот

Почему создание структуры в выражении if запрещено в Go?

Go жалуется на создание экземпляра структуры в if-statement. Зачем? Есть ли правильный синтаксис для этого, который не включает временные переменные или новые функции?

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)
    }
}

Ошибка (в строке if-statement): синтаксическая ошибка: неожиданная:, ожидающая: = или = или запятая

Это дает ту же ошибку:

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

Это работает как ожидалось:

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

Ответ 1

Вы должны окружить правую часть скобки ==. В противном случае go подумает, что "{" - это начало блока "if". Следующий код работает нормально:

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}