golang 随机数

golang支持两种随机数生成方式:

  • math/rand          // 伪随机
  • crypto/rand        // 真随机

math/rand伪随机生成的数字是确定的,不论在什么机器、什么时间,只要执行的随机代码一样,那么生成的随机数就一样。为了尽量随机性,那么我们可以每次使用不同的seed来启动程序,就可以保证每次启动都产生新的随机数,聪明的你肯定想到了使用时间戳

func main() {fmt.Println(rand.Intn(100))//设置随机数种子,由于种子数值,每次启动都不一样//所以每次随机数都是随机的rand.Seed(time.Now().UnixNano())//随机生成100以内的正整数fmt.Println(rand.Intn(100))
}

crypto/rand 就是从这个地方读“真随机”数字返回,但性能比较慢。比上面慢10倍以上

package mainimport ("crypto/rand""encoding/binary""fmt""time"
)func main() {var n int32binary.Read(rand.Reader, binary.LittleEndian, &n)fmt.Println(n)
}

通用随机数算法

package mainimport ("fmt""math/rand""time"
)func main() {fmt.Println(randomString(6, 0))
}/**
* size 随机码的位数
* kind 0    // 纯数字1    // 小写字母2    // 大写字母3    // 数字、大小写字母
*/
func randomString(size int, kind int) string {ikind, kinds, rsbytes := kind, [][]int{[]int{10, 48}, []int{26, 97}, []int{26, 65}}, make([]byte, size)isAll := kind > 2 || kind < 0rand.Seed(time.Now().UnixNano())for i := 0; i < size; i++ {if isAll { // random ikindikind = rand.Intn(3)}scope, base := kinds[ikind][0], kinds[ikind][1]rsbytes[i] = uint8(base + rand.Intn(scope))}return string(rsbytes)
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部