for 循環初始化器語法錯誤
在Go 程式中,在for 迴圈中使用結構體表達式作為初始化器可能會導致編譯時出現語法錯誤。當結構體表達式的左大括號被不明確地解釋為 for 迴圈區塊的開始時,就會發生此錯誤。
考慮以下程式碼範例:
type Request struct { id int line []byte err error } func main() { go 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)
要解決此歧義,您可以透過括起來明確指定結構表達式是複合文字括號中:
func main() { go func() { for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r } }() }
經過此修改,程式碼將成功編譯。括號清楚地表明左大括號是複合文字的一部分,而不是 for 迴圈本身。
以上是為什麼有結構初始化器的 Go `for` 迴圈會導致語法錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!