如何在Go中生成固定长度的随机字符串?
大家好!我刚开始学习Go,遇到了一个典型问题:需要生成指定长度的随机字符串,例如用于创建唯一标识符、令牌或密码。我写了这样的代码:
```go
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println(RandString(10))
}
func RandString(n int) string {
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
b := make([]rune, n)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
return string(b)
}
```
代码似乎能工作,但我注意到一个奇怪的行为:每次运行程序时生成的字符串都相同。我搜索了一下,得知需要使用`rand.Seed()`,但即使添加了`rand.Seed(time.Now().UnixNano())`,如果程序快速连续运行多次,有时字符串仍会重复。
此外,我对最佳实践感兴趣:如何使生成具有加密安全性?