Generación de números aleatorios en Go

Sheeraz Gul 20 junio 2023
  1. Generación de números aleatorios en Go
  2. Genera números aleatorios entre un rango específico
  3. Generar una matriz de números aleatorios
  4. Semilla antes de generar los números aleatorios
  5. Use Rand para generar cadenas aleatorias
Generación de números aleatorios en Go

Este tutorial demuestra cómo usar la funcionalidad de generación de números aleatorios en GoLang.

Generación de números aleatorios en Go

GoLang proporciona soporte integrado para la funcionalidad de generación de números aleatorios. El paquete integrado math tiene el método rand(), que se utiliza para la generación de números aleatorios.

El método math/rand genera números pseudoaleatorios. El método rand() puede generar un número aleatorio entre el intervalo de 0 y n.

La sintaxis de este método es:

RandomNumber := rand.Intn()

El método Intn() especifica el valor entero de n. Probemos un ejemplo:

package main

import (
    "fmt"
    "math/rand"
)

func main() {

    // Generating numbers between `0 <= n < 100`.
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100))
    fmt.Println()

}

El código anterior generará números aleatorios entre 0 y 100. Vea el resultado:

81
87
47
59
81

Genera números aleatorios entre un rango específico

El rand.Intn() generará un número aleatorio entre 0 y el número dado, pero ¿qué pasa si queremos producir un número aleatorio entre el rango especificado? Un método similar puede generar un número aleatorio entre un rango específico con una simple operación matemática.

Ver el ejemplo:

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    minrange := 20
    maxrange := 45
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange) + minrange)

}

El código anterior generará números aleatorios entre 20 y 45. Vea el resultado:

26

32

42

29

26

Program exited.

Generar una matriz de números aleatorios

De manera similar, podemos generar una matriz de números aleatorios utilizando el método rand(). Solo tenemos que usar el bucle for para generar los números y ponerlos en una matriz.

Ver el ejemplo:

package main

import (
    "fmt"
    "math/rand"
)

func RandomArray(ArrayLength int) []int {

    arr := make([]int, ArrayLength)

    for i := 0; i <= ArrayLength-1; i++ {

        arr[i] = rand.Intn(ArrayLength)
    }

    return arr
}

func main() {

    ArrayLength := 15
    fmt.Println(RandomArray(ArrayLength))
}

El código anterior generará una matriz de números aleatorios con una longitud de 15. Vea el resultado:

[11 12 2 14 1 3 10 5 1 0 14 1 12 14 13]

Program exited.

Semilla antes de generar los números aleatorios

El método seed() se utiliza para especificar desde dónde empezar a generar el número aleatorio porque el método rand() generará los números realizando alguna operación sobre el valor anterior.

Esta es la parte más importante de generar el número aleatorio para proporcionar una semilla cercana a un número aleatorio real. Probemos un ejemplo:

package main

import (
    "fmt"
    "math/rand"
)

func main() {

    rand.Seed(30)
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d \n", rand.Intn(150))

    rand.Seed(30)
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d \n", rand.Intn(150))

    rand.Seed(30)
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d \n", rand.Intn(150))

    fmt.Println()
}

El código anterior inicia el método rand con el mismo valor tres veces. Luego, el generador de números aleatorios generará el mismo número cada vez que encuentre el mismo valor inicial.

Ver la salida:

138 16 41
138 16 41
138 16 41

Program exited.

Use Rand para generar cadenas aleatorias

Podemos generar cadenas aleatorias usando el método rand con la ayuda de bytes. También necesitamos la ayuda del método que genera un número entre un rango específico.

Probemos un ejemplo:

package main

import (
    "fmt"
    "math/rand"
)

func GenerateRandomString(StringLength int) string {

    StringBytes := make([]byte, StringLength)

    for i := 0; i < StringLength; i++ {
        StringBytes[i] = byte(RandNumberinRange(65, 122))
    }

    return string(StringBytes)
}

func RandNumberinRange(minnumber int, maxnumber int) int {

    return minnumber + rand.Intn(maxnumber-minnumber)
}

func main() {
    fmt.Println(GenerateRandomString(25))
}

El código anterior generará cadenas aleatorias utilizando el código ASCII entre 65 y 122, que incluye letras mayúsculas, minúsculas y algunos símbolos. Generará una cadena con una longitud de 25.

Ver la salida:

FbpXH\fgTAvxtUxCbvLXXVOle

También podemos imprimir un carácter aleatorio de la cadena o elemento dado. Veamos un ejemplo:

package main

import (
    "fmt"
    "math/rand"
)

func main() {

    DemoRune := []rune("DELFTSTACK")

    Result := DemoRune[rand.Intn(len(DemoRune))]

    fmt.Println(string(Result))
}

La Runa es un tipo de datos que se utiliza para almacenar el código, que se utiliza para representar los caracteres Unicode. El código anterior imprimirá un carácter aleatorio de la cadena dada.

Ver la salida:

E

Program exited.
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook