53-random-number

//  Go的math/rand包提供伪随机数生成。

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	fmt.Print(rand.Intn(100), ",") // rand.Intn(100)返回0<=n<100的随机整数
	fmt.Print(rand.Intn(100))
	fmt.Println()

	fmt.Println(rand.Float64()) // rand.Float64()返回0.0<=f<1.0的64位浮点数

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

	// 默认的数字生成器具有确定性,因此默认情况下每次都会产生相同的数字序列
	// 为了生成不同的序列,提供一个变化的种子
	s1 := rand.NewSource(time.Now().UnixNano())
	r1 := rand.New(s1)
	// 对于需要保密的随机数,上述方式是不安全的,可以使用crypto/rand包

	// 调用rand.Rand的结果就像调用rand包的函数那样
	fmt.Print(r1.Intn(100), ",")
	fmt.Print(r1.Intn(100))
	fmt.Println()

	// 如果提供相同的种子,那么会生成一样是随机数序列
	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))
}
上次修改: 10 January 2020