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
编译后,我收到错误信息
./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 :
为什么我不能把i ++放在切片索引中?切片的索引是否有任何限制?
答案 0 :(得分:34)
Go Frequently Asked Questions (FAQ)
Why are ++ and -- statements and not expressions? And why postfix, not prefix?
没有指针运算,前缀和后缀的便利值 增量运算符下降。通过从表达式中删除它们 层次结构一样,表达式语法简化而且凌乱 关于++和 - 的评估顺序的问题 - (考虑f(i ++)和 p [i] = q [++ i]也被消除。简化是 重大。至于后缀与前缀,要么可以正常工作,但是 后缀版本更传统;坚持使用前缀 STL,一个名称包含的语言的库,具有讽刺意味的是 后缀增量。
The Go Programming Language Specification
“++”和“ - ”语句增加或减少其操作数 无类型常量1.与赋值一样,操作数必须为 可寻址或地图索引表达。
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]
}
在您的特定情况下,简化为,
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]
}
答案 1 :(得分:14)
根据语言规范http://golang.org/ref/spec#IncDec_statements,i ++是IncDec statements
,statement
,而不是expression
。至于args[index]
,索引必须是expression
。您需要更多详细信息,只需阅读Go Language Specification,它就是语言需求。
答案 2 :(得分:11)
正如其他人所说i++
是一个声明,而不是C中的表达式.Go有一种不同的方式来表达使用多个赋值的相同意图:
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)
}
您对map
的定义也会在运行时失败。
答案 3 :(得分:0)
String j = "C://rafa.jpg".
运算符令人失望。这是我的技巧:
++