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