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++放在切片的索引中?切片索引是否有任何限制?

推荐答案

Go Frequently Asked Questions (FAQ)

Why are ++ and -- statements and not expressions? And why postfix, not prefix?

在没有指针算法的情况下,前缀和后缀的便利值 递增运算符将删除.通过从表达式中删除它们 所有的层次 struct ,表达式语法都简化了,而且乱七八糟 关于++和--求值顺序的问题(考虑f(i++)和 P[i]=Q[++i])也被消除.简化为 意义重大.至于后缀和前缀,两者都可以很好地工作,但是 后缀版本更传统;坚持使用前缀的原因是 具有讽刺意味的是,STL是一种语言的库,其名称包含 后缀增量.

The Go Programming Language Specification

IncDec statements

"++"和"--"语句将其操作数递增或递减 无类型常量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]
}

Go相关问答推荐

Golang Cososdb-gremlin连接

如何在使用中介资源时处理函数中的`defer`

如何描述OpenAPI规范中围棋的数据类型.JSON?

";无效的复制因子;融合Kafka Go客户端

如何在出现错误时停止从通道读取?

如何从 Go Lambda 函数返回 HTML?

有没有办法在 Golang 中使用带有 go-simple-mail lib 的代理?

是否可以在调试期间在 VSCode 中预览 github.com/shopspring/decimal 值?

使用 Go 解组 SOAP 消息

访问传递给可变参数函数的通用 struct 的特定字段

在 Go GRPC 服务器流式拦截器上修改元数据

如何根据 Go 中第二次出现的分隔符拆分字符串?

try 与 golang testify/suite 并行运行测试失败

同时调用应该只获取一次数据

如何在golang中使用ozzo验证进行时间最大验证

Golang:每个键具有多个值的映射

正确编码 JWT

正则表达式处理数字签名的多个条目

(如何)我可以基于接口抽象地实现Stringer吗?

Go 泛型是否与 LINQ to Objects 等效?