首页 > 后端开发 > Golang > 为什么在 Go For 循环初始化程序中使用结构体会导致编译时错误?

为什么在 Go For 循环初始化程序中使用结构体会导致编译时错误?

Mary-Kate Olsen
发布: 2024-12-31 06:16:08
原创
1023 人浏览过

Why Does Using a Struct in a Go For Loop Initializer Cause a Compile-Time Error?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板