首頁 >後端開發 >Golang >為什麼有結構初始化器的 Go `for` 迴圈會導致語法錯誤?

為什麼有結構初始化器的 Go `for` 迴圈會導致語法錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-24 01:34:10976瀏覽

Why Does a Go `for` Loop with a Struct Initializer Cause a Syntax Error?

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

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