Avatar ·

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?