go - 结构在 for 循环初始化器中

标签 go struct composite-literals

知道为什么 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
    }
}()

最佳答案

简化代码:

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)

这个构造是不明确的解析。左大括号 '{' 是否是 composite literal 的一部分并不明显或 for 语句本身的左大括号(for block )。

您可以通过在复合文字周围使用括号使其显而易见(如错误所示):

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

关于go - 结构在 for 循环初始化器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120724/

相关文章:

go - 使用 goroutines 时将函数调用包装到闭包中

google-app-engine - 如何在 Golang 中定义未索引的数据存储属性?

go - 如何生成正确的 RSA key 来签署 JWT?

java - 如何使用java读取给定的二进制结构?

session - gorilla / session : Session be managed (persist changes) between handlers?

c - 在c中使用链表制作strcpy函数

objective-c - 在 Objective-C 中初始化结构数组

pointers - Go struct literals,为什么这个是可寻址的?

具有未导出字段的 Golang 结构文字语法