This commit is contained in:
liwei1dao 2023-06-08 14:58:01 +08:00
commit 0bf5f7b7ad

View File

@ -2,10 +2,10 @@ package comm
import ( import (
"context" "context"
"math/rand" "crypto/rand"
"fmt" "fmt"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"math/big"
"reflect" "reflect"
"strings" "strings"
@ -93,15 +93,16 @@ func ProtoMarshal(rsp proto.Message, msg *pb.UserMessage) (ok bool) {
/// 参数 权重数组 返回值 数组下标 /// 参数 权重数组 返回值 数组下标
func GetRandW(sz []int32) int32 { func GetRandW(sz []int32) int32 {
if len(sz) > 0 { if len(sz) > 0 {
var _totalW int32 // 总权重 var _totalW int64 // 总权重
var _tmpW int32 // 临时权重 var _tmpW int64 // 临时权重
for _, v := range sz { for _, v := range sz {
_totalW += v _totalW += int64(v)
} }
// 随机权重 // 随机权重
n, _ := rand.Int(rand.Reader, big.NewInt(_totalW))
for i, v := range sz { for i, v := range sz {
_tmpW += v _tmpW += int64(v)
if rand.Int31n(_totalW) < _tmpW { if n.Int64() < _tmpW {
return int32(i) return int32(i)
} }
} }
@ -117,7 +118,8 @@ func GetRandNum(min, max int32) int32 {
return min return min
} }
return rand.Int31n(int32(max-min+1)) + min n, _ := rand.Int(rand.Reader, big.NewInt(int64(max-min+1))) //+1 是因为 rand方法范围是[0, max)
return int32(n.Int64()) + min
} }
///通过uid获取用户所在区服 ///通过uid获取用户所在区服