Implementaciones prácticas
Escenarios de generación de números aleatorios en el mundo real
1. Generar enteros aleatorios
package main
import (
"fmt"
"math/rand"
"time"
)
func generateRandomInteger(min, max int) int {
rand.Seed(time.Now().UnixNano())
return rand.Intn(max - min + 1) + min
}
func main() {
// Generate random number between 1 and 100
randomNumber := generateRandomInteger(1, 100)
fmt.Println("Random Number:", randomNumber)
}
2. Selección aleatoria de una lista (slice)
func selectRandomItem(items []string) string {
rand.Seed(time.Now().UnixNano())
return items[rand.Intn(len(items))]
}
func main() {
fruits := []string{"Apple", "Banana", "Cherry", "Date"}
randomFruit := selectRandomItem(fruits)
fmt.Println("Random Fruit:", randomFruit)
}
Casos de uso de la aleatorización
graph TD
A[Randomization Applications]
A --> B[Game Development]
A --> C[Scientific Simulations]
A --> D[Security Testing]
A --> E[Machine Learning]
Generación segura de números aleatorios
Números aleatorios criptográficamente seguros
package main
import (
"crypto/rand"
"fmt"
"math/big"
)
func secureRandomNumber(max int64) (int64, error) {
n, err := rand.Int(rand.Reader, big.NewInt(max))
if err != nil {
return 0, err
}
return n.Int64(), nil
}
func main() {
randomNum, err := secureRandomNumber(1000)
if err != nil {
fmt.Println("Error generating secure random number")
return
}
fmt.Println("Secure Random Number:", randomNum)
}
Técnicas de aleatorización
Técnica |
Caso de uso |
Complejidad |
Semilla simple (Simple Seed) |
Aleatorización básica |
Baja |
Semilla basada en el tiempo (Time-Based Seed) |
Secuencias únicas |
Media |
Semilla criptográfica (Cryptographic Seed) |
Alta seguridad |
Alta |
Optimización de rendimiento
Generador de números aleatorios reutilizable
type RandomGenerator struct {
source rand.Source
rng *rand.Rand
}
func NewRandomGenerator() *RandomGenerator {
source := rand.NewSource(time.Now().UnixNano())
return &RandomGenerator{
source: source,
rng: rand.New(source),
}
}
func (r *RandomGenerator) RandomInt(min, max int) int {
return r.rng.Intn(max - min + 1) + min
}
Mejores prácticas
- Siempre inicialice la semilla (seed) antes de generar números aleatorios
- Utilice la técnica de aleatorización adecuada
- Tenga en cuenta los requisitos de rendimiento y seguridad
- Aproveche los patrones recomendados por LabEx para implementaciones robustas
Manejo de errores y validación
Implemente una comprobación y validación adecuadas de errores al trabajar con la generación de números aleatorios para garantizar la confiabilidad y prevenir comportamientos inesperados.