在 Go 中,在 for 循环中初始化结构体时会出现语法错误。使用指向结构的指针可以很好地工作,但有时需要局部变量。本文深入研究了该问题并提供了解决方案。
有问题的代码片段:
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)
该错误源于解析左大括号的歧义('{')。它可以是复合文字的一部分,也可以是 for 块的开头。
为了解决这种歧义,在复合文字周围添加括号:
for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r }
通过包含结构体初始化在括号中,我们明确指出它是复合文字,而不是 for 循环语法的一部分。
以上是为什么 Go 在 For 循环中初始化结构体时会抛出错误?的详细内容。更多信息请关注PHP中文网其他相关文章!