1. ホーム
  2. syntax

[解決済み] Go golang、シンタックスエラー: unexpected ++, expecting :

2022-02-16 06:31:55

質問

  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++を入れられないのですが、何か制限があるのでしょうか?

どうすればいいですか?

<ブロッククオート

よくある質問(FAQ)に進む

なぜ ++ や -- は式ではなく、文なのですか?また、なぜpostfix, はプレフィックスではないのですか?

ポインタ演算がないと、プリフィックスやポストフィックスの利便性が損なわれます。 インクリメント演算子が減少する。式から削除することで 階層構造全体が単純化され、式の構文も単純化されます。 と -- の評価順序に関する問題(f(i++) と p[i] = q[++i])も不要になる。この簡略化は が大きい。ポストフィックスとプリフィックスに関しては、どちらでも良いのですが プレフィックスにこだわるのは、1960年代から1960年代にかけてのことである。 STLは、皮肉にもその名前に "S "が含まれている言語用のライブラリです。 ポストフィックス・インクリメント

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]
}