短縮変数宣言を使おう
Go では := を使って、型を省略した変数宣言ができます。var との使い分けと、:= の制約を学びます。
:= による短縮変数宣言とは
前のレッスンでは、var を使って変数を宣言しました。
package main
import "fmt"
func main() {
var message string = "Hello"
fmt.Println(message) // => Hello
}
Go には、もっと短く変数を宣言する方法があります。それが := を使った短縮変数宣言です。
package main
import "fmt"
func main() {
message := "Hello"
fmt.Println(message) // => Hello
}
:= を使うと、var と型の指定を省略して変数を宣言できます。基本構文は次のとおりです。
変数名 := 値
右辺の値から Go が型を自動的に判断してくれるため、型を書く必要がありません。これを型推論と呼びます。例えば、"Hello" を代入すると string 型、42 を代入すると int 型になります。
package main
import "fmt"
func main() {
name := "Go" // string 型と判断される
year := 2009 // int 型と判断される
fmt.Println(name) // => Go
fmt.Println(year) // => 2009
}
string(文字列)や int(整数)などのデータ型については、後続のレッスンで詳しく学びます。
var と := の使い分け
:= は便利ですが、関数の中でのみ使えます。 関数の外で := を使うとコンパイルエラーになります。
package main
import "fmt"
// 関数の外では var を使う
var appName string = "Codize"
func main() {
// 関数の中では := が使える
message := "ようこそ"
fmt.Println(appName) // => Codize
fmt.Println(message) // => ようこそ
}
関数の中で値とともに変数を宣言する場合は、:= を使うのが一般的です。一方、var は次のような場面で使います。
- 関数の外で変数を宣言するとき
- ゼロ値で初期化したいとき(前のレッスンで学んだように、
var name stringと書くと空文字列になります)
:= と再代入の違い
:= は「変数の宣言」と「値の代入」を同時に行います。そのため、同じ変数に対して := を2回使うとコンパイルエラーになります。
package main
func main() {
x := 10
x := 20 // 同じ変数を再度宣言しようとしている
} // => コンパイルエラー: no new variables on left side of :=
値を変更したい場合は、= を使って再代入します。
package main
import "fmt"
func main() {
x := 10 // := で宣言と代入
fmt.Println(x) // => 10
x = 20 // = で再代入(宣言済みなので var や := は不要)
fmt.Println(x) // => 20
}
:= は最初の1回だけ使い、2回目以降の値の変更には = を使うと覚えておきましょう。
まとめ
:=でvarと型の指定を省略して変数を宣言できる- Go が値から型を自動的に判断する(型推論)
:=は関数の中でのみ使える(関数の外ではvarを使う)- 同じ変数に
:=は2回使えない(再代入は=を使う)
演習に挑戦