Como gerar uma string aleatória de comprimento fixo em Go?
Olá a todos! Comecei a estudar Go recentemente e me deparei com uma tarefa típica: preciso gerar strings aleatórias de comprimento definido, por exemplo, para criar identificadores únicos, tokens ou senhas. Escrevi o seguinte código:
```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)
}
```
O código parece funcionar, mas notei um comportamento estranho: a cada execução do programa, a mesma string é gerada. Pesquisei e descobri que é necessário usar `rand.Seed()`, mas mesmo após adicionar `rand.Seed(time.Now().UnixNano())`, às vezes as strings se repetem se o programa for executado várias vezes seguidas muito rapidamente.
Além disso, estou interessado em melhores práticas: como tornar a geração criptograficamente segura?