for ループ初期化子の構造体: 複合リテラルの曖昧さ
Go では、for ループ初期化子で構造体式を使用すると構文エラーが発生する可能性があります適切に扱われない場合。構造体へのポインタは正常に機能しますが、ローカル構造体変数の宣言には特定の構文が必要です。
この問題を説明するには、次のコード スニペットを考えてみましょう。
type Request struct { id int line []byte err error } func() { 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 }
この構文は、複合リテラルを明示的に宣言し、解析中のあいまいさを回避します。
以上がGo For ループ初期化子で構造体を使用するとコンパイル時エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。