Golang中如何生成随机数

发表时间: 2024-05-30 09:32
package main //必须有个main包import(    "fmt"    "math/rand")func main(){    //设置种子, 只需一次    //如果种子参数一样, 每次运行程序产生的随机数都一样    rand.Seed(666)    for i := 0; i < 5; i++ {    //产生随机数    fmt.Println("rand = ", rand.Int()) //随机很大的数    }}

输出结果:

rand = 4343637058903381868rand = 3769183255805726892rand = 1923662109321608638rand = 1818688891928401469rand = 4144162958715305555

们发现执行多次(go run), 执行的结果都是一样的。

以当前系统时间作为种子参数

【实例】

package main //必须有个main包import(    "fmt"    "math/rand"    "time")func main(){    //设置种子, 只需一次    //如果种子参数一样, 每次运行程序产生的随机数都一样    rand.Seed(time.Now().UnixNano()) //以当前系统时间作为种子参数    for i := 0; i < 5; i++ {        //产生随机数        fmt.Println("rand = ", rand.Int()) //随机很大的数    }    }

输出结果:

rand = 3940521889726020146rand = 192168332379482357rand = 4387217183374865907rand = 5065690078239378655rand = 5229197242740660876

限制最大的随机数

func Intn(n int) int

返回一个取值范围在[0,n)的伪随机int值, 如果n<=0会panic。 panic: 返回错误

package main //必须有个main包import(    "fmt"    "math/rand"    "time")func main(){    //设置种子, 只需一次    //如果种子参数一样, 每次运行程序产生的随机数都一样    rand.Seed(time.Now().UnixNano()) //以当前系统时间作为种子参数    for i := 0; i < 5; i++ {    //产生随机数    fmt.Println("rand = ", rand.Intn(1000)) //随机很大的数    }}
输出结果:rand = 691rand = 132rand = 979rand = 157rand = 866