社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
随机函数在语言里有两个包,分别是“math/rand”和“crypto/rand”。
“math/rand”的rand包实现了伪随机数生成器。该包里有 exp.go,normal.go,rand.go,rng.go,zipf.go 。
"crypto/rand"的rand包实现了用于加解密的更安全的随机数生成器。该包里有rand.go,rand_linux.go,rand_unix.go,rand_windows.go,util.go。
package main
import (
"fmt"
"math/rand"
)
func main() {
for i := 0; i < 10; i++ {
fmt.Println(rand.Int())
}
}
想到了设置一个随机种子,种子数字为10好了。如下:
package main
import (
"fmt"
"math/rand"
)
func main() {
<pre name="code" class="plain"> rand.New(rand.NewSource(10))
for i := 0; i < 10; i++ {fmt.Println(rand.Int())}}
然后你又会发现跟上面还是一样的,再运行也还是一样的。于是你猜想,跟种子没有关系啊?不是,因为这个时候的rand是默认的。看源码就明白,原来rand.Int()下的随机数都是以1为种子。rand相当于默认的全局。
于是就有了一下代码:
package main
import (
"fmt"
"math/rand"
)
func main() {
rnd := rand.New(rand.NewSource(10))
for i := 0; i < 10; i++ {
fmt.Println(rnd.Int())
}
}
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 10; i++ {
fmt.Println(rnd.Int())
}
}
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
vcode := fmt.Sprintf("%06v", rnd.Int31n(1000000))
fmt.Println(vcode)
}
rand.NewSource(10)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!