Go を含めて多くのプログラミング言語では、変数というものを使います。
package main
import ("math/rand"
"time"
"fmt"
)
func main() {
var str string
str = "サイコロの目は %d です\n"
rand.Seed(time.Now().Unix())
fmt.Printf(str, rand.Intn(6) + 1)
fmt.Printf(str, rand.Intn(6) + 1)
fmt.Printf(str, rand.Intn(6) + 1)
str = "テストは %3d 点でした\n"
fmt.Printf(str, rand.Intn(101))
fmt.Printf(str, rand.Intn(101))
fmt.Printf(str, rand.Intn(101))
}
サイコロの目は 6 です
サイコロの目は 3 です
サイコロの目は 1 です
テストは 29 点でした
テストは 61 点でした
テストは 87 点でした
var str string
var というキーワードで、変数を定義することを宣言します。var は variable(変数)の略だと思えば判りやすいと思います。var の次に変数名を指定します。ここでは str という名前にしています。最後に変数が扱う値の型を指定します。ここでは文字列の型である string 型を指定しています。型については別の章で詳しく説明します。
str = "サイコロの目は %d です\n"
変数 str を初期化しています。string 型の変数を初期化しない場合は、自動的に ""(空文字列)が入っています。
fmt.Printf(str, rand.Intn(6) + 1)
変数 str の使用例です。
str = "テストは %3d 点でした\n"
変数 str に違う値を代入しています。
Go 言語の変数の定義と初期化には、簡略した方法が、いくつか用意されています。
package main
import ("math/rand"
"time"
"fmt"
)
func main() {
rand.Seed(time.Now().Unix())
var test string
test = "テストの結果は"
var score int = rand.Intn(101)
ten := "点です"
fmt.Println(test, score, ten)
}
テストの結果は 97 点です
var score int = rand.Intn(101)
変数の定義と初期化は、このように 1 行で行なうこともできます。さらにこの場合は、変数 score に入る値が整数値であることが = の右辺から推論されるので、型指定の int を省略して、var score = rand.Intn(101) とすることもできます。なお int という型は整数値の型です。integer(整数)の略だと思えば判りやすいと思います。
ten := "点です"
Go 言語では、さらに簡略された変数の定義と初期化方法が用意されています。:= の左辺に変数名を指定して、:= の右辺に値を指定します。これで、var キーワードを使わなくても、変数の定義と初期化が行われます。Go 言語の変数定義では、この方法が最もよく使われます。
fmt.Println(test, score, ten)
この部分は、main パッケージの println 関数を使って、println(test, score, ten) と書くこともできます。
その場合は、fmt パッケージの読み込みはやめなければなりません。Go 言語では使われないパッケージを読み込んだ場合はエラーとなります。
Go 言語のコマンドラインプログラミングでは、fmt パッケージの Println 関数を使うほうが一般的です。
変数名には、自由な名前がつけられます。このようにプログラマーが自由に名前を決められるものを識別子と言います。Go 言語の識別子には次の命名規則があります。