首页 >后端开发 >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