首页 > 后端开发 > Golang > 为什么使用结构表达式初始化器的 Go `for` 循环会失败,如何修复?

为什么使用结构表达式初始化器的 Go `for` 循环会失败,如何修复?

DDD
发布: 2024-12-31 15:20:11
原创
410 人浏览过

Why Does a Go `for` Loop Fail with a Struct Expression Initializer, and How Can It Be Fixed?

For 循环初始化器中的结构体表达式

在 Go 中,在 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
    }
}()
登录后复制

此代码将触发编译时错误:“expected布尔或范围表达式,找到简单的语句(复合文字周围缺少括号?)”。之所以会产生歧义,是因为左大括号 { 可以解释为复合文字的开头,也可以解释为 for 块的左大括号。

要解决此歧义,请将结构表达式括在括号中,明确表示:它是一个复合文字:

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

通过此更改,代码将成功编译并按预期执行,使用新的 Request 结构初始化局部变量 r并在每次迭代中递增其 id 值。

以上是为什么使用结构表达式初始化器的 Go `for` 循环会失败,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

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