Struct in for ループ イニシャライザの構文エラー
Go プログラムで、for ループのイニシャライザとして struct 式を使用すると、次のような結果が生じる可能性があります。コンパイル時の構文エラー。このエラーは、構造式の左中括弧が for ループ ブロックの開始として曖昧に解釈された場合に発生します。
次のコード例を考えてみましょう:
type Request struct { id int line []byte err error } func main() { go 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)
この曖昧さを解決するには、次のようにして構造式が複合リテラルであることを明示的に指定できます。括弧で囲みます:
func main() { go func() { for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r } }() }
この変更により、コードは正常にコンパイルされます。括弧は、左中括弧が for ループ自体ではなく複合リテラルの一部であることを明確にします。
以上が構造体イニシャライザを使用した Go `for` ループが構文エラーを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。