Syntax Go golang,语法错误:意外++;,期望:
编译之后,我得到了错误消息Syntax Go golang,语法错误:意外++;,期望:,syntax,go,Syntax,Go,编译之后,我得到了错误消息 func test(args ...string) { var msg map[string] interface{} i := 0 msg["product"] = args[i++] msg["key"] = args[i++] msg["signature"] = args[i++] msg["string_to_sign"] = args[i++] } go build utils.go 为什么
func test(args ...string) {
var msg map[string] interface{}
i := 0
msg["product"] = args[i++]
msg["key"] = args[i++]
msg["signature"] = args[i++]
msg["string_to_sign"] = args[i++]
}
go build utils.go
为什么我不能把I++放在切片的索引中?切片索引是否有任何限制?根据语言规范,i++是一个
IncDec语句
,它是语句
,但不是表达式
。至于参数[index]
,索引必须是表达式
。你想要更多的细节,只需阅读它的Go语言规范,这正是语言所需要的
没有指针算法,前缀和后缀的方便值
增量运算符将删除。通过从表达式中删除它们
总的来说,表达式语法被简化了,而且比较混乱
关于++和--(考虑f(i++)和
p[i]=q[++i])也被消除。简化是
重要的至于后缀和前缀,两者都可以,但是
后缀版本更传统;对前缀的坚持是随着时间的推移而产生的
具有讽刺意味的是,STL是一种语言的库,其名称包含
后缀增量
“++”和“--”语句将其操作数递增或递减
非类型化常量1。与赋值一样,操作数必须为
可寻址或映射索引表达式
./utils.go:28: syntax error: unexpected ++, expecting :
./utils.go:28: missing statement after label
./utils.go:29: syntax error: unexpected ++, expecting :
./utils.go:30: syntax error: unexpected ++, expecting :
./utils.go:31: syntax error: unexpected ++, expecting :
./utils.go:36: syntax error: unexpected ++, expecting :
./utils.go:37: syntax error: unexpected ++, expecting :
以下赋值语句在语义上是等价的:
IncDecStmt = Expression ( "++" | "--" ) .
写,
IncDec statement Assignment
x++ x += 1
x-- x -= 1
在你的特殊情况下
func test(args ...string) {
var msg map[string]interface{}
i := 0
msg["product"] = args[i]
i++
msg["key"] = args[i]
i++
msg["signature"] = args[i]
i++
msg["string_to_sign"] = args[i]
}
正如其他人所说,
i++
是go中的一个语句,而不是C中的一个表达式。go使用多个赋值来表达相同意图的方式不同:
func test(args ...string) {
var msg map[string]interface{}
msg["product"] = args[0]
msg["key"] = args[1]
msg["signature"] = args[2]
msg["string_to_sign"] = args[3]
}
您对
map
的定义在运行时也会失败。++
运算符令人失望。这是我的技巧:
func test(args ...string) {
msg := make(map[string]string)
i := 0
msg["product"], i = args[i], i+1
msg["key"], i = args[i], i+1
msg["signature"], i = args[i], i+1
msg["string_to_sign"], i = args[i], i+1
fmt.Printf("%v\n", msg)
}
1.您只需使用
i++
即可,无需i+=1
。2.对于这个特定的代码,绝对不需要使用“i”。++如果这样使用的话,没有任何好处:GORANG的最佳设计决定之一。@ ShashankV,你必须是Python爱好者和C++仇恨者。DNicely put-没有想到要这样做,必须在inc函数中返回*i(int)而不是i(*int)
func test(args ...string) {
i := 0
inc := func(i *int) int { *i++; return i }
var msg map[string] interface{}
msg["product"] = args[inc(&i)]
msg["key"] = args[inc(&i)]
msg["signature"] = args[inc(&i)]
msg["string_to_sign"] = args[inc(&i)]
}