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

Loops 如何基于for循环中的结构声明变量,loops,go,struct,Loops,Go,Struct,下面是一个在for循环之前声明变量的工作程序 包干管 进口fmt 类型括号结构{ ch字符串 位置int } 键入堆栈[]方括号 func main{ p:=括号{ch:a} st:=makestack,0 对于i:=0;i

下面是一个在for循环之前声明变量的工作程序

包干管 进口fmt 类型括号结构{ ch字符串 位置int } 键入堆栈[]方括号 func main{ p:=括号{ch:a} st:=makestack,0 对于i:=0;i<3;i++{ p=括号{ch:a,pos:1} st=附录st,p 打印格式 打印格式 } } 我想声明与for循环相同的变量。怎样这是一次错误的尝试

package main

import "fmt"

type brackets struct {
    ch   string
    pos  int
}

type stack []brackets

func 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:=makestack,0,括号用作值

我感到困惑,因为声明int和string等标准类型非常容易。为什么不是我的结构

报告说:

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

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

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)
}
.

报告说:

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

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

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)
}

.

你根本不能。Go的语法不允许这样做。我已经看过SimpleStmt的Go参考,但还不清楚。你能提到或解释你为什么说“根本不能”吗?你能举个例子吗?我问这个问题是因为我想弄清楚什么是允许的,什么是不允许的。你根本不能。Go的语法不允许这样做。我已经看过SimpleStmt的Go参考,但还不清楚。你能提到或解释你为什么说“根本不能”吗?你能举个例子吗?我问这个问题是因为我想清楚什么是允许的,什么是不允许的。我找不到这个,for规范没有提到它,或者我错过了Cool!我所做的就是加上括号。我知道有一个简单的解决办法。谢谢。我找不到这个,说明书没有提到它,或者我错过了酷!我所做的就是加上括号。我知道有一个简单的解决办法。非常感谢。