Rumah > pembangunan bahagian belakang > Golang > Mengapakah Menggunakan Struct dalam Pemula Go For Loop Menyebabkan Ralat Masa Kompilasi?

Mengapakah Menggunakan Struct dalam Pemula Go For Loop Menyebabkan Ralat Masa Kompilasi?

Mary-Kate Olsen
Lepaskan: 2024-12-31 06:16:08
asal
1023 orang telah melayarinya

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

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
    }
}()
Salin selepas log masuk

Kod ini menimbulkan kompil- ralat masa:

expected boolean or range expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan