今回はgolangで「no new variables on left side of :=」というエラーが出たときの原因と解決策について紹介していきます。
golangで「no new variables on left side of :=」というエラーが出た
golangで開発を行っていると「no new variables on left side of :=」のようなエラーに遭遇します。
「panic: runtime error: index out of range」は以前紹介した「redeclared in this block」というエラーと同時によく発生します。
「no new variables on left side of :=」の原因
「redeclared in this block」と同時に出ることが多いというのは、使われている変数を再度宣言しようとするとこのエラーが発生します。
func main() {
a := 1
a := 10
fmt.Println(a)
}
例えばこのコードのように変数aを一度宣言して、1を代入していますが、後にさらに変数aを宣言して10を代入しようとしています。
このまま実行しようとすると一度宣言した変数aをもう一度宣言しようとしているためエラーが発生します。
main.go:7:4: no new variables on left side of := (exit status 1)
「no new variables on left side of :=」の対処法
このエラーを解消するには一度宣言した変数は再度宣言せずに、新たに別の変数を作るようにしましょう。
func main() {
a := 1
b := 10
fmt.Println(a,b)
}
ちゃんと変数を分けて宣言したらエラーは発生せず、実行することができます。ちなみに実行結果は1 10が出力されます。
スコープ外であれば同じ変数を使える
同じ変数を再定義するのはNGといっても、一概にそうではなく例外はあります。
例えば以下のコードのようにfor文の外と中にそれぞれ変数aを宣言しています。この場合はそれぞれの変数aはスコープが異なり、影響を与えないためエラーが発生しません。
func main() {
a := 1
for i := 0; i < 10; i++ {
a := i
fmt.Println(a)
}
fmt.Println(a)
}
実行してみると0 1 2 3 4 5 6 7 8 9 1が出力されます。
他にも別の関数のようにスコープ外であれば同じ変数であっても使うことができます。
func main() {
a := 1
print()
fmt.Println(a)
}
func print() {
a := 10000
fmt.Println(a)
}
このコードの実行結果は10000 1となり、変数aはそれぞれの関数内で独立していることがわかります。
golangをもっと詳しくなりたい方に
golang学習のために筆者が実際に受講したUdemy教材をまとめています。
golang学習のために筆者が実際に読んでおすすめしたい本をまとめています。