El paquete math/rand ofrece soporte para generar números pseudoaleatorios.
Así se genera un número entero aleatorio entre 0 y 99:
n := rand.Intn(100) // n is a random int, 0 <= n < 100
La función rand.Float64 devuelve un número de punto flotante aleatorio entre 0.0 y 1.0:
f := rand.Float64() // f is a random float64, 0.0 <= f < 1.0
También hay soporte para barajar un slice (u otras estructuras de datos):
x := []string{"a", "b", "c", "d", "e"}
// shuffling the slice put its elements into a random order
rand.Shuffle(len(x), func(i, j int) {
x[i], x[j] = x[j], x[i]
})
Las secuencias de números que genera el paquete math/rand no son verdaderamente aleatorias.
Dado un valor de «semilla» específico, los resultados son totalmente deterministas.
En Go 1.20 y posteriores, la semilla se elige automáticamente al azar, así que verás una secuencia de números aleatorios distinta cada vez que ejecutes tu programa.
En versiones anteriores de Go, la semilla era 1 de forma predeterminada.
Así que, para obtener secuencias distintas en cada ejecución del programa, tenías que sembrar manualmente el generador de números aleatorios, por ejemplo con la hora actual, antes de obtener cualquier número aleatorio.
rand.Seed(time.Now().UnixNano())
Elaine está trabajando en un nuevo juego para niños que incluye animales y varitas mágicas. Ya es hora de programar funciones para lanzar un dado, generar energía aleatoria para las varitas y mezclar un slice.
Implementa una función RollADie.
Este será el dado tradicional de veinte caras con números del 1 al 20.
d := RollADie() // d will be assigned a random int, 1 <= d <= 20
Implementa una función GenerateWandEnergy.
La energía de la varita debe ser un número de punto flotante aleatorio igual o mayor que 0.0 y menor que 12.0.
f := GenerateWandEnergy() // f will be assigned a random float64, 0.0 <= f < 12.0
El juego incluye ocho animales diferentes:
Escribe una función ShuffleAnimals que devuelva un slice con los ocho animales en orden aleatorio.
Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.