一尘不染

在for循环初始化器中构造

go

知道为什么for循环初始化程序中的此struct表达式在编译时会导致语法错误吗?在这种情况下,指向struct的指针工作正常,但是我需要像波纹管这样的局部变量。感谢您的建议!

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
    }
}()

阅读 353

收藏
2020-07-02

共1个答案

一尘不染

简化您的代码:

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

给出编译时错误:

预期的布尔值或范围表达式,找到简单的语句(缺少复合文字周围的括号?)(以及另外1个错误)

该构造难以解析。'{'不管是复合文字的一部分还是for语句本身(for
)的开头括号,开头括号都不是显而易见的。

您可以通过在组合文字周围使用括号来使其变得明显(如错误所示):

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