我的代码:
package main
import (
"fmt"
"math/rand"
//"runtime"
"time"
)
func main() {
//runtime.GOMAXPROCS(1)
fmt.Println("===rand.New(rand.NewSource(64))====")
for i := 0; i < 20; i++ {
r := rand.New(rand.NewSource(64))
fmt.Print(fmt.Sprint(r.Intn(5)) + "-")
}
fmt.Println("")
fmt.Println("===rand.New(rand.NewSource(time.Now().UnixNano()))====")
for i := 0; i < 20; i++ {
r2 := rand.New(rand.NewSource(time.Now().UnixNano()))
fmt.Print(fmt.Sprint(r2.Intn(5)) + "-")
}
fmt.Println("")
fmt.Println("====rand.Seed(time.Now().UnixNano())===")
for i := 0; i < 20; i++ {
rand.Seed(time.Now().UnixNano())
fmt.Print(fmt.Sprint(rand.Intn(5)) + "-")
}
}
输出的效果为:
G:\goWorkspace\src>go run main.go
===rand.New(rand.NewSource(64))====
3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-
===rand.New(rand.NewSource(time.Now().UnixNano()))====
1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-
====rand.Seed(time.Now().UnixNano())===
1-4-4-4-4-4-4-4-4-4-4-4-4-4-4-3-3-3-3-3-
G:\goWorkspace\src>go run main.go
===rand.New(rand.NewSource(64))====
3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-
===rand.New(rand.NewSource(time.Now().UnixNano()))====
1-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-4-4-
====rand.Seed(time.Now().UnixNano())===
4-4-4-4-4-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-
G:\goWorkspace\src>go run main.go
===rand.New(rand.NewSource(64))====
3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-
===rand.New(rand.NewSource(time.Now().UnixNano()))====
4-4-4-4-4-4-3-3-3-3-3-3-3-3-3-3-3-3-3-3-
====rand.Seed(time.Now().UnixNano())===
1-1-1-1-1-1-1-2-2-2-2-2-2-2-2-2-2-2-2-2-
环境: go版本 1.4 操作系统:win8 64bit 有什么方法:让随机数更好的生成吗?
有疑问加站长微信联系(非本文作者)

你自己的代码写的有问题,比如最后一个,改成这样试试:
这样可以的,我要是把生成随机数封装成一个方法的话,这个方法被for循环调用,有会出现这个问题。不过我我已经知道怎么解决了!谢谢了!
最终代码:'''package main import ( "fmt" "math/rand" "time" )
func init(){ rand.Seed(time.Now().UnixNano())//修改全局的随机数种子 } func main() { for i := 0; i < 200; i++ { fmt.Print(fmt.Sprint(rand.Intn(5)) + "-") } }'''
格式化一下 代码
晕,怎么Markdown 格式失败了
正解