124

ここで何が起こっているのですか?

package main

import "fmt"

func main() {

    myArray  :=[...]int{12,14,26}  ;     
    fmt.Println(myArray)

    myArray  :=[...]int{11,12,14} //error pointing on this line 

    fmt.Println(myArray) ;

}

それは言うエラーをスローします

no new variables on left side of :=

私がやっていたのは、すでに宣言されている変数に値を再割り当てすることでした。

4

4 に答える 4

162

colon :既存の変数に新しい値を割り当てるので、2番目のステートメントからを削除します。

myArray = [...]int{11,12,14}

colon :最初のステートメントで行っているように、短い宣言と割り当てを初めて実行するときに使用されますmyArray :=[...]int{12,14,26}

于 2012-11-11T06:48:11.143 に答える
27

:=goと。には2種類の代入演算子があり=ます。これらは(代入に関して)意味的に同等ですが、最初の宣言も「短い変数宣言」(http://golang.org/ref/spec#Short_variable_declarations)です。つまり、左側に少なくとも正しくするための新しい変数宣言。

2番目を単純な代入ステートメントに変更することができます:=->=または、アルゴリズムに問題がない場合は、新しい変数を使用できます。

于 2012-11-11T07:24:27.630 に答える
8

補足として、再宣言は多変数の短い宣言にのみ表示できます

言語仕様からの引用:

通常の変数宣言とは異なり、短い変数宣言は、変数が同じタイプの同じブロックで以前に宣言されていて、空白以外の変数の少なくとも1つが新しい場合に、変数を再宣言できます。結果として、再宣言は多変数の短い宣言にのみ表示されます。再宣言は新しい変数を導入しません。元の値に新しい値を割り当てるだけです。

package main

import "fmt"


func main() {
    a, b := 1, 2
    c, b := 3, 4

    fmt.Println(a, b, c)
}

これは、golangでの変数の再宣言に関する非常に良い例です: https ://stackoverflow.com/a/27919847/4418897

于 2018-06-13T05:30:45.820 に答える
7
myArray  :=[...]int{12,14,26}

前のコメント投稿者が述べたように、 は一種の省略形および/または変数宣言:=の短縮形です。

したがって、上記のステートメントでは、2つのことを行っています。

  1. 変数をmyArrayとして宣言しています。
  2. myArray変数に整数の配列を割り当てています。

ここで行っていることが原因で、コードの2番目の部分は失敗します。

myArray  :=[...]int{11,12,14} //error pointing on this line 

すでに整数値が含まれている既存の変数myArrayをRE宣言しています。

これは機能します:

myArray = [...]int{11,12,14} // NO error will be produced by this line

なぜなら、それは整数配列を既存の(事前に宣言された/初期化された)変数に割り当てているからです。

于 2012-11-13T00:48:36.043 に答える