¿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?