Golangでランダムな数値を生成する手順を丁寧に解説します

Golang

本記事では、プログラミング言語Goでランダムな数値を生成する方法を紹介します。

math/randパッケージを使用する

randパッケージには、さまざまな種類の乱数値のための複数の関数が含まれています。

まずは、 “math/rand” パッケージをインポートしてください。

ランダム数値を生成するための乱数シードの設定

乱数を生成するためには、シードを設定する必要があります。

乱数のシードを設定するにはrand.Seed(seed int64) という関数を使います。rand.Seed関数は入力としてint64を受け取り、それをシードとして設定します。

ここで一定のシードを設定すると、同じ数字が出力されます。そこで、呼び出すたびに変化する可変シードにする必要があり、timeを使うのはそのためです。

rand.Seed(time.Now().UnixNano())

Golangでランダムな整数を生成する

randパッケージの Intn() 関数は、0からnまでの区間にある整数を生成することができます。

また、与えられた引数が0より小さい場合、エラーを返します。

result := rand.Int()  // ランダムな整数を生成します。

上記を改良して下限と上限を定義し、その範囲内でランダム生成するようにすることができます。

以下がそのやり方です。

result := rand.Intn(max-min) + min // minとmaxが範囲となる

浮動小数点型のランダムな数値を生成する方法

浮動小数点型乱数の生成は、int型乱数の生成と同じように簡単にできます。

0.0から1.0までの浮動小数点数を返すfloat64関数を使います。

rand.Float64()

ランダムな整数の配列を生成する

intの配列を生成するには、まず空の配列を作成します。そして、そこにランダムなint型の値を追加します。

以下は、int型の配列を生成するコード例です。

package main
 
import (
    "fmt"
    "math/rand"
    "time"
)
 
func main() {   
    var randomArray [4]int
    rand.Seed(time.Now().UnixNano())
    for i:=0; i<4; i++ {
			randomArray[i] = rand.Intn(100)
    }
    fmt.Println(randomArray) // [8 50 96 60]
}

math/rand パッケージの Perm() メソッド

rand パッケージに含まれるperm関数は、0からnまでの整数のランダムな並べ替えを返します。

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano())
	result := rand.Perm(5)

	fmt.Println(result) // [5 4 3 1 2]
}

Golangで暗号化乱数を生成する方法

暗号用乱数を生成するには、”crypto/rand “パッケージを使用します。

“crypto/rand “パッケージのIntn()関数はランダムな整数を、Prime()関数はランダムな素数を生成することができます。

package main

import (
	"crypto/rand"
	"fmt"
)

func main() {
	p, _ := rand.Prime(rand.Reader, 30)
	fmt.Println(p) // 868787849
}

タイトルとURLをコピーしました