ホームページ > バックエンド開発 > Golang > Go For ループ初期化子で構造体を使用するとコンパイル時エラーが発生するのはなぜですか?

Go For ループ初期化子で構造体を使用するとコンパイル時エラーが発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-31 06:16:08
オリジナル
1024 人が閲覧しました

Why Does Using a Struct in a Go For Loop Initializer Cause a Compile-Time Error?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート