for 循环初始化器中的结构体:复合文字歧义
在 Go 中,在 for 循环初始化器中使用结构体表达式可能会导致语法错误如果处理不当。虽然指向结构体的指针可以正常工作,但声明本地结构体变量需要特定的语法。
为了说明该问题,请考虑以下代码片段:
type Request struct { id int line []byte err error } 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)
出现歧义是因为左大括号可以被解释为复合文字或 for 的开始 堵塞。要解决此问题,请在复合文字两边使用括号:
for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r }
此语法显式声明复合文字,避免解析期间出现歧义。
以上是为什么在 Go For 循环初始化程序中使用结构体会导致编译时错误?的详细内容。更多信息请关注PHP中文网其他相关文章!