如何在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
相关产品推荐
相关产品推荐

