Golang 如何生成随机字符串/字符
我们可能想要生成随机字符串或一组字符,以执行某些操作或将某些与字符串相关的功能添加到应用程序中。我们可以从一组字符中随机获取一个字符,在给定字符串的字符顺序上进行随机或生成随机字符串。我们可以在Golang中使用rand,encoding包。在本文中,我们将看到如何在Golang中生成随机字符串。
从字符串中获取随机字符
假设我们想要从a到z中获取一个随机字母,我们不能硬编码它们为特定的值,我们需要一种伪随机的方式来从一个字符串中获取一个字符。我们将使用rand模块从给定字符串中选择一个随机字符。
首先,我们创建一个包含其中所有字符集的字符串。这将只是Go语言中的字符串,因为我们在双引号中定义它。
charset := “abcdefghijklmnopqrstuvwxyz”
上述字符串可以是您想要获取随机字符的任何内容。
接下来,我们需要从字符串中随机选择一个字符,我们可以通过在Golang中导入rand包来实现。 rand函数有一个名为Intn的函数,它在0(包括)到提供的数字(不包括)之间生成随机数字。因此,它基本上将整数(例如n)作为参数,并返回0到n-1之间的任何随机数字。
因此,我们可以通过这种方式获得字符串的随机索引,并使用该索引访问字符。提供给Intn函数的参数将是字符串的总长度。
charset[rand.Intn(len(charset))]
我们将在变量中存储上述输出,因此我们从字符串中选择了一个随机字符。我们还需要确保每次运行程序时生成不同的种子,我们可以使用Golang中的time包中的time.Now函数来实现这一点。我们需要将时间转换为秒,我们可以使用Unix函数或UnixNano / UnixMilli / UnixMicro函数来完成,它们分别将时间转换为秒,纳秒,毫秒和微秒,简单地使用Unix也可以正常工作。
以下是展示上述说明的脚本。
输出:
生成随机字符串
我们可以使用一些随机数字生成和字符代码算法来生成随机字符串。首先,我们将定义字符串的长度,它可以是您喜欢的任何内容。接下来,我们需要创建一个预定义大小的字节切片。字节是Golang中的一种数据类型,您可以在官方文档中了解更多信息。然后,我们将遍历字节切片,并使用特定范围内的随机字符进行填充。由于Golang中的字节接受ASCII字符代码,因此我们可能需要参考ASCII表以了解要从中生成的字符的代码。
length := 4
ran_str := make([]byte, length)
上述代码段定义了长度为4的字符串,然后使用make函数创建了一个具有此长度的字节切片。
我们仅会生成大写字母,因此我们将为每个字符分配代码65,并添加一个介于0到25之间的随机整数,即我们将能够生成从65到90的代码。由于我们将有26个字母的26个代码,现在如果您查看65到90,则是ASCII中A到Z字符的字符代码。因此,我们将使用这些随机生成的字符填充字节切片作为字节。
for i := 0; i < length; i++ {
ran_str[i] = ran_str(65 + rand.Intn(25))
}
在生成字节片后,我们可以通过将字节片与字符串连接来获得字符串变量中的片段。
str := string(ran_str)
并且,我们需要确保每次运行脚本时都获得新的种子,以生成唯一的随机数,我们可以使用time.Now函数来执行该操作。 time.Now函数获取当前时间,我们只需使用Unix函数将其转换为秒,因为它是一种可行的种子格式。 Unix函数以秒为单位返回时间(自1971年1月1日以来的经过时间)。
rand.Seed(time.Now().Unix())
因此,通过总结上述解释,我们可以编写脚本以生成随机字符串。
输出:
打乱一个字符串
我们甚至可以在Golang中打乱字符串的字符,我们可以使用Golang中rand模块中的Shuffle函数。提供了一个字符串,我们可以编写一个交换函数来交换字符串中的两个字符。我们首先定义一个字符串,可以是您希望打乱的任何内容。接下来,我们可以声明一个rune切片,用于存储新的打乱字符串。
str := “geeksforgeeks”
shuff := []rune(str)
使用随机的Shuffle函数,我们可以将打乱的字符存储到新创建的run切片中。 Shuffle函数接受两个参数,字符串长度和交换函数。交换函数将简单地获取两个索引(整数),并在函数内部使用在该字符串中解析的这两个索引即i和j th索引交换两个字符。
rand.Shuffle(len(shuff), func(i, j int) {
shuff[i], shuff[j] = shuff[j], shuff[i]
})
因此,使用上述逻辑和说明,我们可以创建脚本,还应添加time.Now函数,每次调用Shuffle函数时,都应具有新的种子。现在,为了为程序执行生成新的种子,我们将使用当前时间作为种子。我们可以使用time.Now函数生成种子,然后获取Unix秒(自1970年1月1日以来的时间)。
rand.Seed(time.Now().Unix())
输出: