Avatar ·

¿Cómo generar una cadena aleatoria de longitud fija en Go?

¡Hola a todos! Acabo de empezar a aprender Go y me encontré con una tarea típica: necesito generar cadenas aleatorias de una longitud determinada, por ejemplo, para crear identificadores únicos, tokens o contraseñas. Escribí este 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) } ``` El código parece funcionar, pero noté un comportamiento extraño: cada vez que ejecuto el programa se genera la misma cadena. Busqué en Google y descubrí que necesito usar `rand.Seed()`, pero incluso después de agregar `rand.Seed(time.Now().UnixNano())`, a veces las cadenas se repiten si el programa se ejecuta varias veces seguidas muy rápido. Además, me interesan las mejores prácticas: ¿cómo hacer que la generación sea criptográficamente segura?