Golang 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
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
方法来生成指定范围内的随机整数。
这种封装方式不仅提高了代码的可读性,还使得随机数生成器的使用更加灵活和可控。