Go での乱数生成
このチュートリアルでは、GoLang で乱数生成機能を使用する方法を示します。
Go での乱数生成
GoLang は、乱数生成機能の組み込みサポートを提供します。 組み込みパッケージ math
には、乱数生成に使用されるメソッド rand()
があります。
math/rand
メソッドは疑似乱数を生成します。 rand()
メソッドは、0 と n の間の乱数を生成できます。
このメソッドの構文は次のとおりです。
RandomNumber := rand.Intn()
Intn()
メソッドは n
の整数値を指定します。 例を試してみましょう:
package main
import (
"fmt"
"math/rand"
)
func main() {
// Generating numbers between `0 <= n < 100`.
fmt.Print(rand.Intn(100), "\n")
fmt.Print(rand.Intn(100), "\n")
fmt.Print(rand.Intn(100), "\n")
fmt.Print(rand.Intn(100), "\n")
fmt.Print(rand.Intn(100))
fmt.Println()
}
上記のコードは、0 から 100 までの乱数を生成します。出力を参照してください。
81
87
47
59
81
特定の範囲内の乱数を生成する
rand.Intn()
は 0 から指定された数値の間の乱数を生成しますが、指定された範囲内の乱数を生成したい場合はどうすればよいでしょうか? 同様の方法で、単純な数学演算で特定の範囲内の乱数を生成できます。
例を参照してください。
package main
import (
"fmt"
"math/rand"
)
func main() {
minrange := 20
maxrange := 45
fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
fmt.Println(rand.Intn(maxrange-minrange) + minrange)
}
上記のコードは、20 から 45 の間の乱数を生成します。出力を参照してください。
26
32
42
29
26
Program exited.
乱数の配列を生成する
同様に、rand()
メソッドを使用して乱数の配列を生成できます。 for
ループを使用して数値を生成し、配列に入れるだけです。
例を参照してください。
package main
import (
"fmt"
"math/rand"
)
func RandomArray(ArrayLength int) []int {
arr := make([]int, ArrayLength)
for i := 0; i <= ArrayLength-1; i++ {
arr[i] = rand.Intn(ArrayLength)
}
return arr
}
func main() {
ArrayLength := 15
fmt.Println(RandomArray(ArrayLength))
}
上記のコードは、長さ 15 の乱数の配列を生成します。出力を参照してください。
[11 12 2 14 1 3 10 5 1 0 14 1 12 14 13]
Program exited.
乱数を生成する前のシード
seed()
メソッドは、乱数の生成をどこから開始するかを指定するために使用されます。これは、rand()
メソッドが前の値に対して何らかの操作を実行して数値を生成するためです。
これは、実際の乱数に近いシードを提供するために乱数を生成する最も重要な部分です。 例を試してみましょう:
package main
import (
"fmt"
"math/rand"
)
func main() {
rand.Seed(30)
fmt.Printf("%d ", rand.Intn(150))
fmt.Printf("%d ", rand.Intn(150))
fmt.Printf("%d \n", rand.Intn(150))
rand.Seed(30)
fmt.Printf("%d ", rand.Intn(150))
fmt.Printf("%d ", rand.Intn(150))
fmt.Printf("%d \n", rand.Intn(150))
rand.Seed(30)
fmt.Printf("%d ", rand.Intn(150))
fmt.Printf("%d ", rand.Intn(150))
fmt.Printf("%d \n", rand.Intn(150))
fmt.Println()
}
上記のコードは、rand
メソッドに同じ値を 3 回シードします。 次に、乱数ジェネレーターは、同じシード値を見つけるたびに同じ数値を生成します。
出力を参照してください。
138 16 41
138 16 41
138 16 41
Program exited.
Rand を使用してランダムな文字列を生成する
bytes
の助けを借りて rand
メソッドを使用してランダムな文字列を生成できます。 特定の範囲内の数値を生成するメソッドの助けも必要です。
例を試してみましょう:
package main
import (
"fmt"
"math/rand"
)
func GenerateRandomString(StringLength int) string {
StringBytes := make([]byte, StringLength)
for i := 0; i < StringLength; i++ {
StringBytes[i] = byte(RandNumberinRange(65, 122))
}
return string(StringBytes)
}
func RandNumberinRange(minnumber int, maxnumber int) int {
return minnumber + rand.Intn(maxnumber-minnumber)
}
func main() {
fmt.Println(GenerateRandomString(25))
}
上記のコードは、大文字、小文字、およびいくつかの記号を含む 65 ~ 122 の ASCII コードを使用して、ランダムな文字列を生成します。 長さ 25 の文字列が生成されます。
出力を参照してください。
FbpXH\fgTAvxtUxCbvLXXVOle
指定された文字列または要素からランダムな文字を出力することもできます。 例を見てみましょう:
package main
import (
"fmt"
"math/rand"
)
func main() {
DemoRune := []rune("DELFTSTACK")
Result := DemoRune[rand.Intn(len(DemoRune))]
fmt.Println(string(Result))
}
Rune
は、Unicode 文字を表すために使用されるコードを格納するために使用されるデータ型です。 上記のコードは、指定された文字列からランダムな文字を出力します。
出力を参照してください。
E
Program exited.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook