首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go golang,语法错误:意外的++,期望:

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

Stack Overflow用户
提问于 2014-09-12 03:24:33
回答 4查看 98K关注 0票数 60
代码语言:javascript
复制
  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

编译后,我将得到错误消息。

代码语言:javascript
复制
    ./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++放在切片索引中呢?切片指数有什么限制吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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

写,

代码语言:javascript
复制
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]
}

在你的特殊情况下,它简化为,

代码语言:javascript
复制
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]
}
票数 69
EN

Stack Overflow用户

发布于 2014-09-12 03:39:23

根据语言规范,statements,i++是IncDec statements,它是statement,而不是args[index]expression.As,索引必须是expression。你想要更多的细节,只需阅读它的Go语言规范,这正是语言所要求的。

票数 18
EN

Stack Overflow用户

发布于 2014-09-12 15:31:55

正如其他人所说的,i++是go中的语句,而不是C中的表达式。Go使用多个赋值来表达相同意图的方式不同:

代码语言:javascript
复制
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的定义在运行时也会失败。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25800242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档