如何在 Go 语言中生成随机字符串字符?


在许多编程应用程序中,生成随机字符串或字符是一项常见任务,从生成随机密码到生成唯一 ID 都是如此。在本文中,我们将探讨如何在 Go 语言中生成随机字符串或字符。

使用 math/rand 包

Go 语言中的 math/rand 包提供了一种简单的方法来生成随机数和字符串。要生成随机字符串,我们可以先生成一个随机数,然后将其转换为字符串。

示例

以下是一种简单的方法:

package main

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

const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

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

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

func main() {
   randomString := generateRandomString(10)
   fmt.Println(randomString)
}

在此代码中,我们定义了一个名为 charset 的常量,其中包含我们希望包含在随机字符串中的字符集。我们还定义了一个全局的 seededRand 变量,用于生成随机数。

然后,我们定义了一个名为 generateRandomString 的函数,它接受一个整数参数 length 并返回长度为 length 的随机字符串。该函数创建一个长度为 length 的空字节切片,然后为切片的每个索引生成一个来自 charset 字符串的随机字符。最后,我们将字节切片转换为字符串并返回它。

在 main 函数中,我们生成一个长度为 10 的随机字符串并将其打印到控制台。

输出

dSJGOaf3BR

使用 crypto/rand 包

虽然 math/rand 包适用于许多应用程序,但它不适用于加密目的。对于生成用于加密目的的随机字符串,我们应该改为使用 crypto/rand 包。

示例

以下是如何使用 crypto/rand 包生成随机字符串的示例:

package main

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

func generateRandomString(length int) string {
   b := make([]byte, length)
   _, err := rand.Read(b)
   if err != nil {
      panic(err)
   }
   return base64.StdEncoding.EncodeToString(b)
}

func main() {
   randomString := generateRandomString(10)
   fmt.Println(randomString)
}

在此代码中,我们定义了一个名为 generateRandomString 的函数,它接受一个整数参数 length 并返回长度为 length 的随机字符串。该函数首先创建一个长度为 length 的空字节切片。然后,我们使用 crypto/rand 包中的 rand.Read 函数用随机字节填充该切片。最后,我们将字节切片编码为 base64 字符串并返回它。

在 main 函数中,我们生成一个长度为 10 的随机字符串并将其打印到控制台。

输出

A5lNf2rprREAmg==

结论

在 Go 语言中生成随机字符串或字符可以使用 math/rand 包或 crypto/rand 包来实现。虽然 math/rand 包适用于许多应用程序,但对于生成用于加密目的的随机字符串,应使用 crypto/rand 包。

更新于:2023-05-05

6K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告