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
Run Code Online (Sandbox Code Playgroud)
编译后,我收到错误信息
./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 :
Run Code Online (Sandbox Code Playgroud)
为什么我不能把i ++放在切片索引中?切片指数有任何限制吗?
pet*_*rSO 41
为什么++和 - 语句而不是表达式?为什么postfix,不是前缀?
如果没有指针运算,前后增量运算符的便利值就会下降.通过从表达层次共,表达式语法被简化并且围绕++和评价的顺序删除它们的杂乱的问题 - (考虑F(1 ++)和p [I] = Q [++ I])被消除,以及.简化很重要.至于后缀与前缀,要么工作正常,但后缀版本更传统; 坚持使用STL,这是一个语言库,其名称包含一个后缀增量.
"++"和" - "语句通过无类型常量1递增或递减其操作数.与赋值一样,操作数必须是可寻址的或映射索引表达式.
Run Code Online (Sandbox Code Playgroud)IncDecStmt = Expression ( "++" | "--" ) .以下赋值语句在语义上等效:
Run Code Online (Sandbox Code Playgroud)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]
}
Run Code Online (Sandbox Code Playgroud)
在您的特定情况下,简化为,
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]
}
Run Code Online (Sandbox Code Playgroud)
And*_*ewN 12
正如其他人所说的那样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)
}
Run Code Online (Sandbox Code Playgroud)
你的定义map也会在运行时失败.
++运营商令人失望。这是我的黑客:
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)]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53144 次 |
| 最近记录: |