一尘不染

Go golang,语法错误:意外++,期望:

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

编译后,我得到错误信息

    ./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 ++放在切片索引中?切片索引有什么限制吗?


阅读 353

收藏
2020-07-02

共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]
}
2020-07-02