rand.Intn () 函数是个伪随机函数,不管运行多少次都只会返回同样的随机数,因为它默认的资源就是单一值,所以必须调用 rand.Seed (),并且传入一个变化的值作为参数,如 time.Now().UnixNano() , 就是可以生成时刻变化的值。

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

func main() {
    // 初始化随机数的资源库, 如果不执行这行, 不管运行多少次都返回同样的值
    rand.Seed(time.Now().UnixNano())
    fmt.Println("A number from 1-100", rand.Intn(81))
}

可以使用rand对象生成随机数。我们应该为rand对象提供一些种子,以使生成的数量不同。如果我们不提供种子,那么编译器将始终产生相同的结果。以下输出:

81

0.9405090880450124

17

package main
import "fmt"
import (
	"math/rand"
	"time"
)
func main() {
	fmt.Print(rand.Intn(100))  //会产生0到100之间的随机整数
	fmt.Println()

	fmt.Print(rand.Float64())	//会产生0到1之间的随机数
	fmt.Println()
	
	rand.Seed(time.Now().Unix())  //Seed生成的随机数
	myrand := random(1, 20)

	fmt.Println(myrand)

}
func random(min, max int) int {
	return rand.Intn(max - min) + min
}