在 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中文網其他相關文章!