通常の変数宣言
go言語での変数宣言は次の形で行います。
var 変数名 型 = 値
Hello Worldのプログラムで、"Hello World"の文字列をいったんmessageという変数に入れてみると次のようになります。
package main
import "fmt"
func main() {
var message string = "Hello World"
fmt.Println(message)
}
型がコンパイラによって推測可能な場合は型を省略することもできます。
package main
import "fmt"
func main() {
var message = "Hello World"
fmt.Println(message)
}
一度に複数の変数を宣言することもできます。
package main
import "fmt"
func main() {
// messageに"Hello", worldに"World"が入る
var message, world = "Hello", "World"
fmt.Println(message + " " + world)
}
変数宣言の省略形
型を省略した場合の変数宣言には省略形があります。
変数名 := 値
varを使った変数宣言とこの省略形の間には少し違いがあります。省略形で宣言された変数には新しい変数と一緒のときに限り再代入が可能です。
次のコードはmessageという変数に"Hello"という値を入れたあとで"GoodBye"を入れようとしています。このときworldという新しい変数と一緒に代入がされるので再代入が許されます。
次のコードはmessageという変数一つだけの状態で再代入をしようとしているのでコンパイルエラーになりますが、
package main
import "fmt"
func main() {
// コンパイルエラー
message := "Hello"
message := "GoodBye"
fmt.Println(message)
}
次のコードはコンパイルが通ります。
package main
import "fmt"
func main() {
message := "Hello"
message, world := "GoodBye", "World"
fmt.Println(message + " " + world)
}
これをvarを使った変数でやろうとするとコンパイルエラーとなります。
package main
import "fmt"
func main() {
// コンパイルエラー!
var message = "Hello"
var message, world = "GoodBye", "World"
fmt.Println(message + " " + world)
}
また、省略形の変数宣言はforループなどでの一時変数の宣言にも使われます。
for i := 0; i < 10; i++ {
fmt.Printf("%d\n", i)
}