首頁 >後端開發 >Golang >為什麼 Go 在 For 迴圈中初始化結構體時會拋出錯誤?

為什麼 Go 在 For 迴圈中初始化結構體時會拋出錯誤?

Barbara Streisand
Barbara Streisand原創
2024-12-31 17:48:09423瀏覽

Why Does Go Throw an Error When Initializing a Struct in a For Loop?

For 迴圈初始化器中與結構體的混淆

在 Go 中,在 for 迴圈中初始化結構體時會出現語法錯誤。使用指向結構的指標可以很好地工作,但有時需要局部變數。本文深入研究了該問題並提供了解決方案。

有問題的程式碼片段:

for r := Request{}; r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}

簡化程式碼,我們得到:

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
}

透過包含結構體初始化在括號中,我們明確指出它是複合文字,而不是for 循環語法的一部分。

以上是為什麼 Go 在 For 迴圈中初始化結構體時會拋出錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn