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 ++放在切片索引中?切片索引有什么限制吗?
前往常见问题解答(FAQ) 为什么++和-语句而不是表达式?为什么使用后缀而不是前缀? 如果不使用指针算法,则前缀和后缀增量运算符的便利性值会下降。通过将它们从表达式层次结构中完全删除,可以简化表达式语法,并且可以消除围绕和-(考虑f(i )和p [i] = q [++ i])的求值的混乱问题。 。简化意义重大。至于后缀和前缀,两者都可以正常工作,但后缀版本更传统。带有STL的语言引起了对前缀的坚持,具有讽刺意味的是,该语言的名称包含后缀增量。 Go编程语言规范 IncDec语句 “ ++”和“-”语句将它们的操作数增加或减少无类型常量1。与赋值一样,该操作数必须是可寻址的或映射索引表达式。 IncDecStmt = Expression ( "++" | "--" ) . 以下赋值语句在语义上是等效的: IncDec statement Assignment x++ x += 1 x-- x -= 1
前往常见问题解答(FAQ)
为什么++和-语句而不是表达式?为什么使用后缀而不是前缀?
如果不使用指针算法,则前缀和后缀增量运算符的便利性值会下降。通过将它们从表达式层次结构中完全删除,可以简化表达式语法,并且可以消除围绕和-(考虑f(i )和p [i] = q [++ i])的求值的混乱问题。 。简化意义重大。至于后缀和前缀,两者都可以正常工作,但后缀版本更传统。带有STL的语言引起了对前缀的坚持,具有讽刺意味的是,该语言的名称包含后缀增量。
Go编程语言规范
IncDec语句
“ ++”和“-”语句将它们的操作数增加或减少无类型常量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] }