美文网首页GoGolang语言社区
03. 数学运算的随机数

03. 数学运算的随机数

作者: 厚土火焱 | 来源:发表于2017-08-08 02:02 被阅读128次

    总是要有使用随机数的情况。这就需要使用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这个数字。

    相关文章

      网友评论

        本文标题:03. 数学运算的随机数

        本文链接:https://www.haomeiwen.com/subject/wamzlxtx.html