03. 数学运算的随机数

总是要有使用随机数的情况。这就需要使用math包。

package main

import(
    "fmt"
    "math/rand"
)

func main(){
    fmt.Println("My random number is",  rand.Intn(190))
}

如果你运行这个程序,就会发现每次返回的随机数是不变的。因为运行环境是没有发生变化的。
为了每次得到不同的随机数,就需要一个随机数种子。

package main

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

func main(){
    r := rand.New(rand.NewSource(time.Now().UnixNano()))
    fmt.Println("My random number is", r.Intn(190))
}

时间是不停的在发生变化的,利用time.Now().UnixNano()获得一个带纳秒的时间戳,形成一个新源。然后随机数就可以有想要的效果了。
当然也可以再简单一点点

package main

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

func main(){
    rand.Seed(time.Now().UnixNano())
    fmt.Println("My random number is", rand.Intn(190))
}

随机数是由一个Source生成的,而Float64和Int这样的顶级函数默认是使用共享的Source的,Seed函数用来初始化默认的Source。
对于多Go程并发来说,默认的Source是安全的。

【注意】rand.Intn(190)是要生成一个[0-190)之间的整数。190的圆括号表示不包含190这个数字。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容