Loops 如何基于for循环中的结构声明变量
下面是一个在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循环相同的变量。怎样这是一次错误的尝试Loops 如何基于for循环中的结构声明变量,loops,go,struct,Loops,Go,Struct,下面是一个在for循环之前声明变量的工作程序 包干管 进口fmt 类型括号结构{ ch字符串 位置int } 键入堆栈[]方括号 func main{ p:=括号{ch:a} st:=makestack,0 对于i:=0;i
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!我所做的就是加上括号。我知道有一个简单的解决办法。谢谢。我找不到这个,说明书没有提到它,或者我错过了酷!我所做的就是加上括号。我知道有一个简单的解决办法。非常感谢。