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++放在切片索引中呢?切片指数有什么限制吗?
发布于 2014-09-12 03:44:53
Go Frequently Asked Questions (FAQ) Why are ++ and -- statements and not expressions? And why postfix, not prefix? 没有指针算法,前置和后缀增量运算符的方便值就会下降.通过将它们从表达式层次结构中完全删除,表达式语法得到简化,并且消除了++和-(考虑f(i++)和pi = q++i)的计算顺序的杂乱问题。简化是非常重要的。至于后缀和前缀,两者都很好,但后缀版本更传统;对前缀的坚持出现在STL中,这是一种语言库,具有讽刺意味的是,它的名称包含一个后缀增量。 The Go Programming Language Specification IncDec statements "++“和"--”语句通过非类型化常量1增加或减少它们的操作数。与赋值一样,操作数必须是可寻址的或映射索引表达式。 IncDecStmt =表达式( "++“=”-“)。 以下赋值语句在语义上是等价的: IncDec语句赋值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]
}发布于 2014-09-12 03:39:23
根据语言规范,statements,i++是IncDec statements,它是statement,而不是args[index]的expression.As,索引必须是expression。你想要更多的细节,只需阅读它的Go语言规范,这正是语言所要求的。
发布于 2014-09-12 15:31:55
正如其他人所说的,i++是go中的语句,而不是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的定义在运行时也会失败。
https://stackoverflow.com/questions/25800242
复制相似问题