想要封装一个随机数函数生成 类似于 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 大佬 指点一下
1
gogogo2000 2023-01-06 16:34:37 +08:00
func r(min int, max int) int {
return rand.Intn(max-min+1) + min } |
2
lyonbrown4ddd OP @gogogo2000 如果我想单函数同时支持 int float 等数字类型呢
|
3
yaott2020 2023-01-06 18:02:21 +08:00 via Android
那就泛型
|
4
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)) } ``` |
5
lyonbrown4ddd OP @kumoocat 非常感谢 对 go 泛型还不是很熟练 没想到还可以 T()这样转
|