loops - 如何在for循环中基于结构声明变量
问题描述
这是一个在 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)
}
推荐阅读
- jquery - 即使数据以 json 格式正确返回,Jquery 自动完成也不显示列表
- sql - 添加新行并将行显示为 SQL Server 中的列时如何自动获取行数
- reactjs - How to implement forgot password page on react-admin
- r - 使用 rvest 进行网页抓取
- git - 如何强制 git gui 的图形密码提示框?
- php - 如何使用 PHP Curl 修复“请启用 cookie”Cloudflare 错误
- android - Flutter 检索 ro.product.cpu.abi 的设备属性时出错
- java - 根据客户端 ID 获取用户角色
- c# - c# System.NotSupportedException: 在动态程序集 ADO.Net Oracle UDT 中不支持调用的成员
- reactjs - 我可以告诉 style-loader 在我的 CSS 模块之前加载我的全局 CSS 吗?