📜  如何在 Golang 中生成随机字符串字符?(1)

📅  最后修改于: 2023-12-03 15:24:10.831000             🧑  作者: Mango

在 Golang 中生成随机字符串

在 Golang 中,可以使用 crypto/randmath/rand 包来生成随机字符串。

使用 crypto/rand 包

要生成安全的随机字符串,我们应该使用 crypto/rand 包。这个包提供了加密级别的随机数生成器。

以下是生成指定长度的随机字符串的示例代码:

package main

import (
    "crypto/rand"
    "encoding/base64"
    "fmt"
)

func main() {
    n := 10
    b := make([]byte, n)
    _, err := rand.Read(b)
    if err != nil {
        panic(err)
    }
    fmt.Println(base64.URLEncoding.EncodeToString(b))
}

在上面的代码中,我们使用了 rand.Read() 函数来填充 byte 数组,然后使用 base64 编码将其转换为字符串。请注意,随机字符串的长度应该是 byte 数组的长度(即 n)的 4/3。

使用 math/rand 包

如果我们不需要特别安全的随机数,可以使用 math/rand 包来生成随机字符串。

以下是生成指定长度的随机字符串的示例代码:

package main

import (
    "math/rand"
    "time"
)

const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

var seededRand *rand.Rand = rand.New(
    rand.NewSource(time.Now().UnixNano()))

func String(length int) string {
    b := make([]byte, length)
    for i := range b {
        b[i] = charset[seededRand.Intn(len(charset))]
    }
    return string(b)
}

在上面的代码中,我们使用了 rand.Intn() 函数来选择随机字符。这个函数返回一个 int 类型的非负随机整数,小于 len(charset)

总结

在 Golang 中,我们可以使用 crypto/rand 包来生成安全的随机数,也可以使用 math/rand 包来生成简单的随机数。选择正确的包取决于我们需要多强的随机性。