Dalam Go, ralat sintaks timbul apabila memulakan struct dalam gelung for. Menggunakan penunjuk ke struct berfungsi dengan baik, tetapi pembolehubah tempatan kadangkala diperlukan. Artikel ini menyelidiki isu ini dan menyediakan penyelesaian.
Coretan kod yang bermasalah:
for r := Request{}; r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r }
Mempermudahkan kod, kami mendapat:
for r := Request{}; r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r }
Kod ini terhasil dalam ralat berikut:
expected boolean or range expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)
Ralat berpunca daripada kekaburan dalam menghuraikan pendakap pembukaan ('{'). Ia boleh menjadi sebahagian daripada literal komposit atau permulaan bagi blok.
Untuk menyelesaikan kekaburan ini, kurungan ditambah di sekeliling literal komposit:
for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r }
Dengan melampirkan permulaan struct dalam kurungan, kami secara eksplisit menunjukkan bahawa ia adalah literal komposit dan bukan sebahagian daripada sintaks gelung for.
Atas ialah kandungan terperinci Mengapa Pergi Melempar Ralat Semasa Memulakan Struct dalam For Loop?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!