这是一个在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 i := 0; i < 3; i++ {
p = brackets{ch: "a", pos: 1}
st = append(st, p)
fmt.Println(p)
fmt.Println(st)
}
}
我想声明相同的变量作为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:= make(stack,0),方括号用作值
我很困惑,因为声明标准类型(例如整数和字符串)非常容易。为什么不是我的结构?
当使用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)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句