ホームページ >バックエンド開発 >Golang >構造体イニシャライザを使用した Go `for` ループが構文エラーを引き起こすのはなぜですか?

構造体イニシャライザを使用した Go `for` ループが構文エラーを引き起こすのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-24 01:34:10974ブラウズ

Why Does a Go `for` Loop with a Struct Initializer Cause a Syntax Error?

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 サイトの他の関連記事を参照してください。

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