Lectores como tú ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

La generación de números aleatorios es importante para muchas tareas. Estos incluyen desarrollo de juegos, criptografía y análisis de datos. Los valores aleatorios permiten resultados distintos con un elemento de variabilidad e imprevisibilidad.

Go proporciona dos paquetes para generar valores aleatorios en la biblioteca estándar: matemáticas/rand y criptografía/rand. El matemáticas/rand El paquete es principalmente para operaciones matemáticas. El criptografía/rand El paquete maneja operaciones criptográficamente seguras.

Los paquetes de rand

El matemáticas/rand paquete proporciona un método flexible para generar números aleatorios. Implementa una variedad de generaciones de números pseudoaleatorios. El paquete puede generar un número aleatorio con diferentes distribuciones y usar semillas para controlar la secuencia aleatoria. También puede generar números aleatorios al mismo tiempo o en paralelo.

instagram viewer

El criptografía/rand El paquete implementa un generador de números aleatorios criptográficamente seguro. Incluye funcionalidad para generar números primos aleatorios con alta probabilidad.

Dado que estos paquetes tienen el mismo nombre, deberá usar alias si desea usar ambos en un solo programa, por ejemplo:

importar (
crand "criptografía/rand"
Señor y "matemáticas/rand"
)

Generando enteros aleatorios en Go

Puedes usar el matemáticas/randinterno función para generar números aleatorios en un rango.

importar (
"fmt"
"matemáticas/rand"
"tiempo"
)

funciónprincipal() {
rand Semilla (tiempo. Ahora().UnixNano())

// Intn genera un entero aleatorio entre 0 y 100
// (sin incluir 100)
randomInt := rand. interno(100)

fmt. Println (randomInt)
}

Este código pasa la hora actual al Semilla función. Inicializa el generador de números aleatorios predeterminado para pseudoaleatoriedad.

El interno La función del paquete rand genera un número aleatorio entre un rango específico, en este caso, de 0 a 100.

Genera números aleatorios de punto flotante

Puede generar números aleatorios de punto flotante con el Flotador32 y flotar64 funciones Devuelven números de coma flotante de 32 y 64 bits respectivamente.

Así es como puede generar números aleatorios de punto flotante de 64 bits en Go.

importar (
"fmt"
"matemáticas/rand"
"tiempo"
)

funciónprincipal() {
rand Semilla (tiempo. Ahora().UnixNano())

// genera un float64 aleatorio entre 0.0 y 1.0
randomFloat := rand. Flotar64()

fmt. Println (flotación aleatoria)
}

El proceso de generar números de punto flotante de 32 bits es el mismo que generar números aleatorios de punto flotante de 64 bits.

Generación de números aleatorios criptográficamente seguros en Go

Puedes usar el En t función de la criptografía/rand paquete para generar un número aleatorio criptográficamente seguro. El En t La función toma una instancia de lector y un número máximo para el límite.

importar (
"criptografía/rand"
"fmt"
"matemáticas/grande"
)

funciónprincipal() {
// Crea un gran. Int con el valor máximo para el rango deseado
máx := grande. NewInt(100000000)

// Generar un big aleatorio. En t
// El primer argumento es un lector que devuelve números aleatorios
// El segundo argumento es el valor máximo (no incluido)
randInt, errar := rand. Int (rand. Lector, máx.)

si error! = nulo {
fmt. imprimir("Error al generar un número aleatorio:", errar)
devolver
}

fmt. imprimir("Número aleatorio:", entero al azar)
}

El máximo variable define el valor máximo para el número aleatorio usando el NewInt función de la matemáticas/grande paquete. El En t La función devuelve el entero aleatorio y un error de manejo.

Generación de valores aleatorios criptográficamente seguros

El criptografía/rand el paquete no proporciona funcionalidad integrada para generar criptográficamente seguro cadenas aleatorias. Aún así, puede solucionar esto utilizando el Leer función.

importar (
"criptografía/rand"
"fmt"
)

funcióncryptoRandom(cadena de caracteres cadena, valorLongitud int32)cadena {
bytesSlice := hacer([]byte, valorLongitud)
_, error := rand. Lectura (porciones de bytes)

si error! = nulo {
devolver"Hubo un error al leer del segmento de bytes"
}

para posición, valor := rango segmento de bytes {
aleatorizar := valor % byte(Len(cadena de caracteres))
bytesSlice[pos] = stringChars[aleatorizar]
}

devolvercadena(porciones de bytes)
}

funciónprincipal() {
fmt. Println (cryptoRandom("Pneumonoultram" +
"silicovolcanoconiosis microscópica", 10))
}

El cryptoRandom La función anterior toma una cadena para generar una cadena aleatoria. También toma una longitud (un entero de 32 bits) y devuelve una cadena.

En el cryptoRandom función, la bytesSlice variable es una porción de la longitud de cadena requerida. El bucle for-range atraviesa el segmento de bytes y devuelve y recupera el módulo de los elementos del segmento y la longitud de la cadena en bytes. Actualiza el índice del segmento de bytes con el índice de valor de módulo de la cadena.

Finalmente, el cryptoRandom La función devuelve el formato de cadena del segmento de bytes.

Puede generar UUID con Go

La generación de valores aleatorios es útil para una amplia gama de casos de uso. Si necesita muchos valores aleatorios únicos, puede usar UUID.

Los UUID (Universally Unique Identifiers) garantizan la exclusividad global de los identificadores. Puede usarlos para distinguir entre recursos entre sistemas y evitar conflictos de nombres.

Hay muchos paquetes que puede usar para generar UUID en Go. Puede usar el paquete os para llamar al uuid comando en su sistema operativo, recurra al paquete UUID de Google o use el paquete gouuid para generar UUID.