10

Go は、if ステートメントで構造体をインスタンス化することについて文句を言います。なんで?一時変数や新しい関数を含まない正しい構文はありますか?

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 ステートメント行): 構文エラー: 予期しない :、予期:= または = またはコンマ

これにより、同じエラーが発生します。

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

これは期待どおりに機能します。

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

1 に答える 1

19

== の右側を括弧で囲む必要があります。そうしないと、「{」が「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}
于 2013-04-02T20:49:30.847 に答える