¿Cómo generar strings/caracteres aleatorios en Golang?

Es posible que deseemos generar strings aleatorias o incluso conjuntos de caracteres para realizar algunas operaciones o agregar ciertas funciones relacionadas con strings en una aplicación. Podemos obtener aleatoriamente un carácter de un conjunto de caracteres, aleatorizar el orden de los caracteres de una string determinada o generar una string aleatoria. Podemos usar el paquete de codificación rand en Golang. En este artículo, veremos cómo generar strings aleatorias en Golang.

Obtener un carácter aleatorio de una string

Digamos que queremos obtener un alfabeto aleatorio de la a a la z, simplemente no podemos codificarlos en valores específicos, necesitamos una forma pseudoaleatoria de obtener un carácter de una string. Usaremos el módulo rand para elegir un carácter aleatorio de la string dada. 

En primer lugar, creamos una string con todos los conjuntos de caracteres en ella. Esto será simplemente una string en Go lang como lo definimos entre comillas dobles.

juego de caracteres := “abcdefghijklmnopqrstuvwxyz”

La string anterior puede ser cualquier cosa de la que desee obtener un carácter aleatorio. 

A continuación, debemos elegir aleatoriamente un carácter de la string, podemos hacerlo importando el paquete rand en Golang. La función rand tiene una función llamada Intn, que genera un número aleatorio entre 0 (incluido) y el número proporcionado (no incluido). Básicamente, toma un número entero (por ejemplo, n) como argumento y devuelve cualquier número aleatorio de 0 a n-1. 

Entonces, con esto, podemos obtener el índice aleatorio de la string y acceder al carácter con ese índice. el argumento provisto para la función Intn será la longitud total de la string. 

conjunto de caracteres[rand.Intn(len(conjunto de caracteres))]

Almacenaremos la salida anterior en una variable y, por lo tanto, tenemos un carácter aleatorio seleccionado de una string. También debemos asegurarnos de generar una semilla diferente cada vez que se ejecuta el programa, para que podamos usar la función time.Now del paquete time en Golang. Necesitamos convertir el tiempo en segundos, lo hacemos usando la función Unix o las funciones UnixNano/UnixMilli/UnixMicro, que convierten el tiempo en segundos, nanosegundos, milisegundos y microsegundos respectivamente, simplemente usando Unix también funcionará bien.   

A continuación se muestra un script que muestra el funcionamiento de la explicación anterior.

Go

// Go program to generate random characters from the string
package main
  
import (
    "fmt"
    "math/rand"
    "time"
)
  
func main() {
  
    rand.Seed(time.Now().UnixNano())
  
    // String
    charset := "abcdefghijklmnopqrstuvwxyz"
  
    // Getting random character
    c := charset[rand.Intn(len(charset))]
  
    // Display the character
    fmt.Println(string(c))
}

Producción:

Generated character:q

Generar una string aleatoria

Podemos generar una string aleatoria, utilizando alguna generación de números aleatorios y aritmética de código de caracteres. Primero definiremos la longitud de la string, puede ser lo que quieras. A continuación, necesitamos crear un segmento de bytes de tamaño predefinido. Un byte es un tipo de datos en marcha, puede obtener más información al respecto en los documentos oficiales. Luego iteraremos sobre el segmento de bytes y lo completaremos con caracteres aleatorios entre un rango específico. Como un byte en Golang acepta el código de caracteres ASCII, podemos consultar la tabla ASCII para comprender el código de los caracteres que queremos generar. 

longitud := 4

ran_str := make([]byte, longitud)

Generaremos solo alfabetos en mayúsculas, por lo que asignaremos a cada carácter el código 65 y agregaremos un número entero aleatorio entre 0 y 25, es decir, podremos generar códigos del 65 al 90. Como tendremos 26 códigos para 26 alfabetos y ahora si ve que 65 a 90 es el código de caracteres para los caracteres A a Z en ASCII. por lo tanto, completaremos el segmento de bytes con estos caracteres generados aleatoriamente como bytes.

para yo := 0; i < longitud; yo++ {

ran_str[i] = ran_str(65 + rand.Intn(25))

}

Después de generar el segmento de bytes, podemos obtener el segmento en una variable de string concatenando el segmento de bytes con la string. 

string := string(ran_string)

Además, debemos asegurarnos de obtener una nueva semilla cada vez que ejecutamos el script, para generar números aleatorios únicos, podemos hacerlo usando la función time.Now. La función time.Now nos da la hora actual, simplemente la convertimos en segundos usando la función Unix, ya que es un formato semilla viable. La función Unix devuelve el tiempo en segundos (tiempo pasado en segundos desde el 1 de enero de 1971). 

rand.Seed(tiempo.Ahora().Unix())

Por lo tanto, al resumir la explicación anterior, podemos escribir el script para generar una string aleatoria. 

Go

// Go program to generate a random string
package main
  
import (
    "fmt"
    "math/rand"
    "time"
)
  
func main() {
  
    rand.Seed(time.Now().Unix())
    length := 4
  
    ran_str := make([]byte, length)
  
    // Generating Random string
    for i := 0; i < length; i++ {
        ran_str[i] = ran_str(65 + rand.Intn(25))
    }
  
    // Displaying the random string
    str := string(ran_str)
    fmt.Println(str)
}

Producción:

SNOC

Barajar una string

Incluso podemos mezclar caracteres de la string en Golang, podemos usar la función Shuffle en el módulo rand en Golang. Con una string, podemos escribir una función de intercambio que intercambiará dos caracteres en una string. Primero definiremos una string que puede ser cualquier cosa que desee mezclar. A continuación, podemos declarar un trozo de runa que usaremos para almacenar la nueva string mezclada. 

str := “geeksforgeeks”

barajar := []runa(string)

Usando la función aleatoria aleatoria, podemos almacenar los caracteres mezclados en el segmento de ejecución recién creado. La función Shuffle toma dos argumentos, la longitud de la string y la función de intercambio. La función de intercambio simplemente tomará dos índices (enteros) y dentro de la función, podemos intercambiar los dos caracteres usando los índices analizados en este caso i y j th índice en la string. 

rand.Shuffle(len(shuff), func(i, j int) {

barajar[i], barajar[j] = barajar[j], barajar[i]

})

Entonces, usando la lógica y la explicación anteriores, podemos crear el script agregando también la función time.Now, cada vez que se llama a la función Shuffle, debe tener una nueva semilla. Ahora para generar una nueva semilla para la ejecución del programa, usaremos la hora actual como semilla. Podemos generar la semilla usando la función time.Now y luego obtener los segundos de Unix (el tiempo en segundos pasa desde el 1 de enero de 1970).

rand.Seed(tiempo.Ahora().Unix())

Go

// Go program to Shuffle a String
package main
  
import (
    "fmt"
    "math/rand"
    "time"
)
  
func main() {
    rand.Seed(time.Now().Unix())
  
    str := "geeksforgeeks"
  
    shuff := []rune(str)
  
    // Shuffling the string
    rand.Shuffle(len(shuff), func(i, j int) {
        shuff[i], shuff[j] = shuff[j], shuff[i]
    })
  
    // Displaying the random string
    fmt.Println(string(shuff))
}

Producción:

 eggsekekeorsf

Publicación traducida automáticamente

Artículo escrito por meetgor y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *