为了账号安全,请及时绑定邮箱和手机立即绑定

如何在for循环中基于结构声明变量

如何在for循环中基于结构声明变量

Go
月关宝盒 2022-04-26 10:43:59
这是一个在 for 循环之前声明变量的工作程序。package mainimport "fmt"type brackets struct {    ch   string    pos  int}type stack []bracketsfunc main() {    p := brackets{ch: "a"}    st := make(stack,0)    for i :=  0; i < 3; i++ {        p = brackets{ch: "a", pos: 1}        st = append(st, p)         fmt.Println(p)        fmt.Println(st)    }}我想将相同的变量声明为 for 循环的一部分。如何?这是一个错误的尝试。package mainimport "fmt"type brackets struct {    ch   string    pos  int}type stack []bracketsfunc main() {//    p := brackets{ch: "a"}//    st := make(stack,0)    for st, p, i :=  make(stack,0), brackets{ch: "a"}, 0; i < 3; i++ {        p = brackets{ch: "a", pos: 1}        st = append(st, p)         fmt.Println(p)        fmt.Println(st)    }}我收到以下错误:语法错误:st, p, i := make(stack, 0), 括号用作值我很困惑,因为声明整数和字符串等标准类型非常容易。为什么不是我的结构?
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

规范的复合文字部分说:


当使用 LiteralType 的 TypeName 形式的复合文字出现在关键字和“if”、“for”或“switch”语句块的左大括号之间的操作数时,就会出现解析歧义,并且复合文字是不包含在括号、方括号或花括号中。在这种罕见的情况下,文字的左大括号被错误地解析为引入语句块的大括号。为了解决歧义,复合文字必须出现在括号内。


通过在复合文字周围添加括号来修复代码:


for st, p, i :=  make(stack,0), (brackets{ch: "a"}), 0; i < 3; i++ {

    p = brackets{ch: "a", pos: 1}

    st = append(st, p) 

    fmt.Println(p)

    fmt.Println(st)

}


查看完整回答
反对 回复 2022-04-26
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信