ホームページ >バックエンド開発 >Golang >For ループで構造体を初期化するときに Go がエラーをスローするのはなぜですか?

For ループで構造体を初期化するときに Go がエラーをスローするのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-31 17:48:09391ブラウズ

Why Does Go Throw an Error When Initializing a Struct in a For Loop?

For ループ初期化子における構造体との混乱

Go では、for ループで構造体を初期化するときに構文エラーが発生します。構造体へのポインターを使用することは問題なく機能しますが、ローカル変数が必要になる場合があります。この記事では、この問題を詳しく掘り下げ、解決策を示します。

問題のあるコード スニペット:

for r := Request{}; r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}

コードを単純化すると、次のようになります。

for r := Request{}; r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}

このコードは次のようになります。次のエラー:

expected boolean or range expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)

このエラーは、左中括弧 ('{')。これは、複合リテラルの一部であるか、for ブロックの先頭である可能性があります。

この曖昧さを解決するには、複合リテラルの周りにかっこが追加されます。

for r := (Request{}); r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}

構造体の初期化を囲むことにより、括弧内は、それが複合リテラルであり、for ループ構文の一部ではないことを明示的に示しています。

以上がFor ループで構造体を初期化するときに Go がエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。