golang 抽取随机数 随机字符

long · · 2961 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

golang QQ:29295842 欢迎技术交流 go语言返回1-99之间随机数的方法 ```go package main import ( "fmt" "math/rand" ) func main() { max := big.NewInt(100) i, err := rand.Int(rand.Reader, max) } ``` 随机数 ```go package main import "fmt" import "math/rand" func main() { // 例如,rand.Intn 返回一个随机的整数 n,0 <= n <= 100。 fmt.Print(rand.Intn(100), ",") fmt.Print(rand.Intn(100)) fmt.Println() //rand.Float64 返回一个64位浮点数 f,0.0 <= f <= 1.0。 fmt.Println(rand.Float64()) //这个技巧可以用来生成其他范围的随机浮点数,例如5.0 <= f <= 10.0 fmt.Print((rand.Float64()*5)+5, ",") fmt.Print((rand.Float64() * 5) + 5) fmt.Println() //要让伪随机数生成器有确定性,可以给它一个明确的种子。 s1 := rand.NewSource(42) r1 := rand.New(s1) //调用上面返回的 rand.Source 的函数和调用 rand 包中函数是相同的。 fmt.Print(r1.Intn(100), ",") fmt.Print(r1.Intn(100)) fmt.Println() 如果使用相同的种子生成的随机数生成器,将会产生相同的随机数序列。 s2 := rand.NewSource(42) r2 := rand.New(s2) fmt.Print(r2.Intn(100), ",") fmt.Print(r2.Intn(100)) fmt.Println() } ``` ``` $ go run random-numbers.go 81,87 0.6645600532184904 7.123187485356329,8.434115364335547 5,87 5,87 ``` 生成随机数的方法 ```go package main import ( "fmt" "time" "math/rand" ) func main() { r := rand.New(rand.NewSource(time.Now().UnixNano())) for i:=0; i<10; i++ { fmt.Println(r.Intn(100)) } } ``` 产生不重复的随机数 ```go package utils import ( "math/rand" "time" ) var channel chan int64 = make(chan int64, 32) func init() { go func() { var old int64 for { o := rand.New(rand.NewSource(time.Now().UnixNano())).Int63() if old != o { old = o select { case channel <- o: } } } }() } func RandInt64() (r int64) { select { case rand := <-channel: r = rand } return } ``` 随机生成验证码 ```go /** * size 随机码的位数 * kind 0 // 纯数字 1 // 小写字母 2 // 大写字母 3 // 数字、大小写字母 */ func krand(size int, kind int) []byte { ikind, kinds, result := kind, [][]int{[]int{10, 48}, []int{26, 97}, []int{26, 65}}, make([]byte, size) is_all := kind > 2 || kind < 0 rand.Seed(time.Now().UnixNano()) for i := 0; i < size; i++ { if is_all { // random ikind ikind = rand.Intn(3) } scope, base := kinds[ikind][0], kinds[ikind][1] result[i] = uint8(base + rand.Intn(scope)) } return result } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2961 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传