ホームページ > バックエンド開発 > Golang > 構造式初期化子で Go `for` ループが失敗する理由とその修正方法

構造式初期化子で Go `for` ループが失敗する理由とその修正方法

DDD
リリース: 2024-12-31 15:20:11
オリジナル
386 人が閲覧しました

Why Does a Go `for` Loop Fail with a Struct Expression Initializer, and How Can It Be Fixed?

For ループ初期化子の構造式

Go では、for ループの初期化子として構造体式を使用すると、コンパイル中に構文エラーが発生する可能性があります。構造体へのポインタは許容されますが、構造式を通じて宣言されたローカル変数は問題を引き起こす可能性があります。

次のコード スニペットを検討してください:

type Request struct {
    id   int
    line []byte
    err  error
}

go func() {
    for r := Request{}; r.err == nil; r.id++ {
        r.line, r.err = input.ReadSlice(0x0a)
        channel <- r
    }
}()
ログイン後にコピー

このコードはコンパイル時エラーをトリガーします: "expected"ブール式または範囲式、単純なステートメントが見つかりました (複合リテラルを囲む括弧がありません?)。このあいまいさは、左中括弧 { が複合リテラルの先頭または for ブロックの左中括弧のいずれかとして解釈される可能性があるために発生します。

この曖昧さを解決するには、構造式を括弧で囲み、次のことを明確にします。これは複合リテラルです:

for r := (Request{}); r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}
ログイン後にコピー

この変更により、コードは正常にコンパイルされ、意図したとおりに実行され、ローカル変数 r が初期化されます。新しい Request 構造体を使用し、反復ごとにその ID 値をインクリメントします。

以上が構造式初期化子で Go `for` ループが失敗する理由とその修正方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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