Golang Go语言中封装随机数生成

发布于 1周前 作者 caililin 来自 Go语言

想要封装一个随机数函数生成 类似于 ts 的这样

function random(min?: number, max?: number): number {
  min = min === undefined ? Number.MIN_SAFE_INTEGER : min;
  max = max === undefined ? Number.MAX_SAFE_INTEGER : max;
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

想用上 go 的泛型 但是底层随机数都是 rand.类型 一下子不知道怎么写了 试了下 interface + switch(.type) 感觉不是很优雅 有没有 go 大佬 指点一下


Golang Go语言中封装随机数生成

更多关于Golang Go语言中封装随机数生成的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

func r(min int, max int) int {
return rand.Intn(max-min+1) + min
}

更多关于Golang Go语言中封装随机数生成的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


如果我想单函数同时支持 int float 等数字类型呢

golang<br>package main<br><br>import (<br> "fmt"<br> "math/rand"<br> "time"<br><br> "<a target="_blank" href="http://golang.org/x/exp/constraints" rel="nofollow noopener">golang.org/x/exp/constraints</a>"<br>)<br><br>func random[T constraints.Integer | constraints.Float](min, max T) T {<br> rand.Seed(time.Now().UnixNano())<br> return T(rand.Intn(int(max-min))) + min<br>}<br><br>func main() {<br> fmt.Println(random(1.14, 5.14))<br> fmt.Println(random(1, 5))<br>}<br>

非常感谢 对 go 泛型还不是很熟练 没想到还可以 T()这样转

在Golang(Go语言)中,封装随机数生成是一个常见的需求,特别是在需要生成伪随机数序列时。Go标准库中的math/rand包提供了基本的随机数生成功能,但直接使用时可能会显得比较底层。因此,封装随机数生成器可以帮助我们更方便地管理随机数的生成和分布。

以下是一个简单的封装示例,展示如何创建一个自定义的随机数生成器:

package main

import (
	"fmt"
	"math/rand"
	"time"
)

// RandomNumberGenerator 封装随机数生成器
type RandomNumberGenerator struct {
	rand *rand.Rand
}

// NewRandomNumberGenerator 创建一个新的随机数生成器实例
func NewRandomNumberGenerator() *RandomNumberGenerator {
	seed := time.Now().UnixNano()
	return &RandomNumberGenerator{rand: rand.New(rand.NewSource(seed))}
}

// Int 生成一个指定范围内的随机整数
func (rng *RandomNumberGenerator) Int(min, max int) int {
	return rng.rand.Intn(max-min+1) + min
}

func main() {
	rng := NewRandomNumberGenerator()
	fmt.Println(rng.Int(1, 100)) // 生成1到100之间的随机整数
}

在这个示例中,我们创建了一个RandomNumberGenerator结构体,并在其中封装了一个rand.Rand实例。通过NewRandomNumberGenerator函数,我们可以创建一个新的随机数生成器实例,并使用Int方法来生成指定范围内的随机整数。

这种封装方式不仅提高了代码的可读性,还使得随机数生成器的使用更加灵活和可控。

回到顶部