本篇文章介绍如何在 Go 语言中使用随机数生成功能。


Go 中的随机数生成

rand()
math/randrand()

此方法的语法是:

RandomNumber := rand.Intn()
Intn()
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()

看例子:

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()

看例子:

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]

生成随机数之前的种子

seed()

这是生成随机数以提供接近实际随机数的种子的最重要部分。 让我们尝试一个例子:

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 方法进行了三次播种。 然后,随机数生成器会在每次找到相同的种子值时生成相同的数。

查看输出:

138 16 41
138 16 41
138 16 41

使用 Rand 生成随机字符串

我们可以在字节的帮助下使用 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