go 语言 生成随机数
时间: 2023-07-07 21:18:00 浏览: 104
在 Go 语言中,可以使用 `math/rand` 包中的 `Intn` 函数来生成指定范围内的随机整数。示例如下:
```go
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
// 设置随机数种子
rand.Seed(time.Now().UnixNano())
// 生成 0~99 之间的随机整数
randomNum := rand.Intn(100)
fmt.Println(randomNum)
}
```
需要注意的是,为了避免每次生成的随机数都相同,需要先调用 `rand.Seed` 函数设置随机数种子。可以使用 `time.Now().UnixNano()` 函数获取当前时间的纳秒数作为种子。
相关问题
go语言生成随机数,保证并发场景下不会有相同的随机数
在Go语言中生成随机数可以使用math/rand包。为了保证并发场景下不会有相同的随机数,可以使用sync.Mutex锁来保证代码的互斥访问。
以下是一个生成随机数的示例代码:
```go
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) // 设置随机数种子
var wg sync.WaitGroup
var mu sync.Mutex
var nums []int
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
mu.Lock()
defer mu.Unlock()
num := rand.Intn(100)
nums = append(nums, num)
wg.Done()
}()
}
wg.Wait()
fmt.Println(nums)
}
```
在这个示例中,我们使用rand.Seed函数来设置随机数种子,以保证每次运行程序时生成的随机数都不同。
然后,我们使用sync.Mutex锁来保证在多个goroutine同时生成随机数时,每次只有一个goroutine能够访问共享的nums切片,并将生成的随机数添加到该切片中。
最后,我们使用sync.WaitGroup等待所有goroutine完成,并输出生成的随机数。
go语言生成随机数,保证每一纳秒都不会有相同的随机数
在 Go 语言中,可以使用 `math/rand` 包生成随机数。为了保证每一纳秒都不会有相同的随机数,可以结合当前时间作为随机数种子。具体实现如下:
```go
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
// 以当前时间作为随机数种子
rand.Seed(time.Now().UnixNano())
// 生成随机数
for i := 0; i < 10; i++ {
fmt.Println(rand.Intn(100))
time.Sleep(1 * time.Nanosecond)
}
}
```
在上面的代码中,我们使用 `time.Now().UnixNano()` 获取当前时间的纳秒数,并将其作为随机数种子,然后使用 `rand.Intn()` 生成随机数。为了保证每一纳秒都不会有相同的随机数,我们在生成每个随机数之间加入了一纳秒的延迟。
阅读全文