Goでは、処理(関数)をパッケージにまとめることになっています。Goには最初から便利なパッケージがたくさん用意されています。この章では、よく使う fmt パッケージと math/rand パッケージを紹介します
math/rand パッケージは、乱数を扱うための処理(関数)がまとめられたパッケージです。
package main
import "math/rand"
import "time"
func main() {
rand.Seed(time.Now().Unix())
println("サイコロの目は", rand.Intn(6) + 1, "です")
}
このコードを実行すると、「サイコロの目は 6 です」のように表示されます。数字の部分は実行するたびに1〜6のランダムな数字になります。
import "math/rand"
import "time"
import というキーワードで、math/rand パッケージと time パッケージを読み込んでいます。
println("サイコロの目は", rand.Intn(6) + 1, "です")
rand.Intn( ) で、rand パッケージの中の Intn 処理(関数)を呼び出しています。Intn 関数は、0 から ( ) の中で指定された数値の一つ手前までの、ランダムな整数を返します。+ 1 で、rand 関数が返した 0 から 5 までの値に 1 を足しています。結果として 1 から 6 までのランダムな整数が得られることになります。
println 関数は main パッケージに含まれている関数です。println は、( ) の中に指定した値を、ターミナルに表示します。( ) の中には、カンマで区切って複数の値を指定することができます。指定されたそれぞれの値は、半角スペースで区切られてターミナルに表示されます。
main パッケージの println 関数は小文字で始まっていますが、rand パッケージの Intn 関数は大文字で始まっています。小文字で始まっている関数は、その所属するパッケージ内でしか使えませんが、大文字で始まる関数は、import キーワードを使って読み込めば、違うパッケージ内でも使えます。
rand.Seed(time.Now().Unix())
rand パッケージの Intn 関数は、実際には乱数表という仕組みで決められた値を返しています。どういうことかというと、1 回目は○という値、2 回目は ○という値と決まっているということです。これを本当のランダムな値を返すようにするのが、このコードです。このコードはランダムな値を返す関数を呼び出す前に、記述しておかなければならないと、丸覚えしておきましょう。import キーワードで time パッケージを読み込んだのは、この time パッケージの Now().Unix() 関数を使うためです
fmt は、書式を指定して、ターミナルに文字列を表示したり、ターミナルから文字列を読み込めたりするパッケージです。fmt は、format(フォーマット、書式)の略だと考えれば覚えやすいでしょう。
package main
import ("math/rand"
"time"
"fmt"
)
func main() {
rand.Seed(time.Now().Unix())
println("サイコロの目は", rand.Intn(6) + 1, "です")
fmt.Println("サイコロの目は", rand.Intn(6) + 1, "です")
fmt.Printf("サイコロの目は %d です\n", rand.Intn(6) + 1)
fmt.Printf("サイコロの目は %04d です\n", rand.Intn(6) + 1)
fmt.Printf("サイコロの目は %4d です\n", rand.Intn(6) + 1)
fmt.Printf("サイコロの目は %-4d です\n", rand.Intn(6) + 1)
}
サイコロの目は 6 です
サイコロの目は 6 です
サイコロの目は 3 です
サイコロの目は 0002 です
サイコロの目は 2 です
サイコロの目は 4 です