ここで何が起こっていますか?
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 :=
私がやっていたことは、すでに宣言された変数に値を再割り当てすることでした。
既存の変数に新しい値を割り当てるときに、2番目のステートメントからcolon :
を削除します。
myArray = [...]int{11,12,14}
colon :
は、最初のステートメントで行うように、最初に短い宣言と割り当てを実行するときに使用されます。つまり、myArray :=[...]int{12,14,26}
です。
Go :=
と=
には、2種類の代入演算子があります。それらは(割り当てに関して)意味的には同等ですが、最初の1つは「短い変数宣言」( http://golang.org/ref/spec#Short_variable_declarations )でもあります。正しくするには、少なくとも新しい変数宣言が必要です。
2番目を単純な割り当てステートメント:=
-> =
に変更するか、アルゴリズムで問題ない場合は新しい変数を使用できます。
myArray :=[...]int{12,14,26}
前のコメンターが述べたように、:=
は、速記のタイプおよび/または変数宣言の短縮形です。
したがって、上記の文では、2つのことを行っています。
コードの2番目の部分は、ここで何をしているのかで失敗します。
myArray :=[...]int{11,12,14} //error pointing on this line
既に整数値が含まれているexisting変数myArrayをRE宣言しています。
これは動作します:
myArray = [...]int{11,12,14} //error pointing on this line
なぜなら、それはassigning既存の(事前宣言/初期化された)変数への整数配列だからです。
補足説明として、再宣言は複数変数の短い宣言でのみ表示できます
言語仕様からの引用:
通常の変数宣言とは異なり、短い変数宣言は、同じタイプの同じブロックで以前に宣言されていて、非空白変数の少なくとも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