📅  最后修改于: 2023-12-03 15:24:10.831000             🧑  作者: Mango
在 Golang 中,可以使用 crypto/rand
和 math/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
包来生成随机字符串。
以下是生成指定长度的随机字符串的示例代码:
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
包来生成简单的随机数。选择正确的包取决于我们需要多强的随机性。