首頁 >後端開發 >Golang >為什麼使用結構表達式初始化器的 Go `for` 循環會失敗,如何修復?

為什麼使用結構表達式初始化器的 Go `for` 循環會失敗,如何修復?

DDD
DDD原創
2024-12-31 15:20:11380瀏覽

Why Does a Go `for` Loop Fail with a Struct Expression Initializer, and How Can It Be Fixed?

For 迴圈初始化器中的結構體表達式

在Go 中,在for 迴圈中使用結構體表達式作為初始化器可能會在編譯過程中遇到語法錯誤。雖然指向結構的指標是可以接受的,但透過結構表達式宣告的局部變數可能會引發問題。

考慮以下程式碼片段:

type Request struct {
    id   int
    line []byte
    err  error
}

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

此程式碼會觸發編譯時錯誤:「expected布林或範圍表達式,找到簡單的語句(複合文字周圍缺少括號?)」。之所以會產生歧義,是因為左大括號 { 可以解釋為複合文字的開頭,也可以解釋為 for 區塊的左大括號。

要解決此歧義,請將結構表達式括在括號中,明確表示:它是一個複合文字:

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

透過此更改,程式碼將成功編譯並按預期執行,使用新的Request 結構初始化局部變數r並在每次迭代中遞增其id 值。

以上是為什麼使用結構表達式初始化器的 Go `for` 循環會失敗,如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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