Golang 如何生成随机字符串字符

Golang 如何生成随机字符串字符

在许多编程应用中,生成随机字符串或字符是一个常见的任务,从生成随机密码到生成唯一ID。在本文中,我们将探讨如何在Golang中生成随机字符串或字符。

使用math/rand包

Golang中的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字符串的随机字符。最后,我们将字节切片转换为字符串并返回。

在主函数中,我们生成一个长度为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字符串并返回。

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

输出

A5lNf2rprREAmg==

结论

在Golang中,可以使用math/rand包或crypto/rand包来生成随机字符串或字符。虽然math/rand包适用于许多应用程序,但crypto/rand包应用于生成供密码用途的随机字符串。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程