Go by Example: Random Numbers

El paquete math/rand de Go proporciona generación de números pseudoaleatorios.

package main
import (
    "fmt"
    "math/rand"
    "time"
)
func main() {

Por ejemplo, rand.Intn devuelve un int aleatorio n, 0 <= n < 100.

    fmt.Print(rand.Intn(100), ",")
    fmt.Print(rand.Intn(100))
    fmt.Println()

rand.Float64 devuelve un float64 f, 0.0 <= f < 1.0.

    fmt.Println(rand.Float64())

Esto se puede utilizar para generar números flotantes aleatorios en otros rangos, por ejemplo 5.0 <= f' < 10.0.

    fmt.Print((rand.Float64()*5)+5, ",")
    fmt.Print((rand.Float64() * 5) + 5)
    fmt.Println()

El generador de números por defecto es determinista, por lo que producirá la misma secuencia de números cada vez por defecto. Para producir secuencias variables, dale una semilla que cambie. Ten en cuenta que esto no es seguro para usar en números aleatorios que pretendas sean secretos; usa crypto/rand para esos.

    s1 := rand.NewSource(time.Now().UnixNano())
    r1 := rand.New(s1)

Llama al rand.Rand resultante igual que a las funciones en el paquete rand.

    fmt.Print(r1.Intn(100), ",")
    fmt.Print(r1.Intn(100))
    fmt.Println()

Si siembras una fuente con el mismo número, esta produce la misma secuencia de números aleatorios.

    s2 := rand.NewSource(42)
    r2 := rand.New(s2)
    fmt.Print(r2.Intn(100), ",")
    fmt.Print(r2.Intn(100))
    fmt.Println()
    s3 := rand.NewSource(42)
    r3 := rand.New(s3)
    fmt.Print(r3.Intn(100), ",")
    fmt.Print(r3.Intn(100))
}

Dependiendo de dónde ejecutes este ejemplo, algunos de los números generados pueden ser diferentes. Ten en cuenta que en el entorno de pruebas de Go, sembrar con time.Now() aún produce resultados deterministas debido a la forma en que se implementa el entorno de pruebas.

$ go run random-numbers.go
81,87
0.6645600532184904
7.123187485356329,8.434115364335547
0,28
5,87
5,87

Consulta los documentos del paquete math/rand para referencias sobre otras cantidades aleatorias que Go puede proporcionar.

Siguiente ejemplo: Number Parsing.