Struct in for Loop Initializer: Kekaburan Literal Komposit
In Go, menggunakan ungkapan struct dalam for loop initializer boleh membawa kepada ralat sintaks jika tidak ditangani dengan baik. Walaupun penunjuk kepada struct berfungsi dengan baik, mengisytiharkan pembolehubah struct setempat memerlukan sintaks khusus.
Untuk menggambarkan isu ini, pertimbangkan coretan kod berikut:
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 } }()
Kod ini menimbulkan kompil- ralat masa:
expected boolean or range expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)
Kekaburan timbul kerana pendakap pembukaan boleh ditafsirkan sebagai permulaan sama ada literal komposit atau blok untuk. Untuk menyelesaikan masalah ini, gunakan kurungan di sekeliling literal komposit:
for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r }
Sintaxis ini secara eksplisit mengisytiharkan literal komposit, mengelakkan kesamaran semasa menghuraikan.
Atas ialah kandungan terperinci Mengapakah Menggunakan Struct dalam Pemula Go For Loop Menyebabkan Ralat Masa Kompilasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!