You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Go语言中生成随机数样本?

回答

嘿,其实你完全没必要局限于这种写法!这里有几种更灵活、高效的替代方案,适配不同场景:

1. 预分配切片内存(性能更优)

如果你已经明确知道切片的长度(比如这里的5),直接用make预分配内存再循环赋值会更高效——避免了append过程中可能发生的多次内存扩容操作:

arr := make([]int, 5)
for i := range arr {
    arr[i] = rand.Intn(100)
}

2. 封装成复用函数(代码更整洁)

如果需要多次生成类似的随机切片,把逻辑封装成一个小函数会让代码更易维护:

func generateRandomInts(count, maxVal int) []int {
    result := make([]int, count)
    for i := range result {
        result[i] = rand.Intn(maxVal)
    }
    return result
}

// 调用示例
arr := generateRandomInts(5, 100)

重要提醒:初始化随机数种子

哦对了,差点忘了关键的一步!默认情况下rand.Intn每次运行程序生成的随机序列都是一样的(因为默认种子是1)。所以记得在程序启动阶段初始化随机数种子:

import "time"
import "math/rand"

func main() {
    // Go 1.20之前的写法
    rand.Seed(time.Now().UnixNano())
    
    // Go 1.20+更推荐的方式(避免全局随机源竞争)
    r := rand.New(rand.NewSource(time.Now().UnixNano()))
    arr := make([]int, 5)
    for i := range arr {
        arr[i] = r.Intn(100)
    }
}

回到你的问题:你原来的写法是完全可行的,但如果是固定长度的场景,预分配内存的方式会更高效;如果需要重复生成,封装函数会让代码更干净。

内容的提问来源于stack exchange,提问作者Kenenbek Arzymatov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:56:34