go 封装随机数生成

2023-01-06 15:28:50 +08:00
 lyonbrown4ddd

想要封装一个随机数函数生成 类似于 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 大佬 指点一下

1407 次点击
所在节点    Go 编程语言
5 条回复
gogogo2000
2023-01-06 16:34:37 +08:00
func r(min int, max int) int {
return rand.Intn(max-min+1) + min
}
lyonbrown4ddd
2023-01-06 17:12:08 +08:00
@gogogo2000 如果我想单函数同时支持 int float 等数字类型呢
yaott2020
2023-01-06 18:02:21 +08:00
那就泛型
kumoocat
2023-01-07 00:22:31 +08:00
```golang
package main

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

"golang.org/x/exp/constraints"
)

func random[T constraints.Integer | constraints.Float](min, max T) T {
rand.Seed(time.Now().UnixNano())
return T(rand.Intn(int(max-min))) + min
}

func main() {
fmt.Println(random(1.14, 5.14))
fmt.Println(random(1, 5))
}
```
lyonbrown4ddd
2023-01-07 10:58:22 +08:00
@kumoocat 非常感谢 对 go 泛型还不是很熟练 没想到还可以 T()这样转

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907013

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX