首頁 > 後端開發 > 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板