69 lines
1.2 KiB
Go
69 lines
1.2 KiB
Go
package comm
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"errors"
|
|
"fmt"
|
|
"go_dreamfactory/pb"
|
|
"math/big"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestErro(t *testing.T) {
|
|
err := findUser("ddada")
|
|
if err != nil {
|
|
var customErr = new(CustomError)
|
|
if errors.As(err, &customErr) {
|
|
if customErr.Code == pb.ErrorCode_UserSessionNobeing {
|
|
fmt.Println("用户不存在")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func findUser(uid string) error {
|
|
if strings.Contains(uid, "z_") {
|
|
return NewCustomError(pb.ErrorCode_UserSessionNobeing)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// / 参数 权重数组 返回值 数组下标
|
|
func Test_GetRandWs(t *testing.T) {
|
|
results := make([]int, 0)
|
|
sz := []int32{100, 50, 200, 90, 20}
|
|
num := 2
|
|
if len(sz) > 0 {
|
|
var _totalW int64 // 总权重
|
|
var _tmpW int64 // 临时权重
|
|
for _, v := range sz {
|
|
_totalW += int64(v)
|
|
}
|
|
|
|
for i := 0; i < int(num); i++ {
|
|
_tmpW = 0
|
|
// 随机权重
|
|
n, _ := rand.Int(rand.Reader, big.NewInt(_totalW))
|
|
for i, v := range sz {
|
|
jump := false
|
|
for _, v1 := range results {
|
|
if i == v1 {
|
|
jump = true
|
|
break
|
|
}
|
|
}
|
|
if !jump {
|
|
_tmpW += int64(v)
|
|
if n.Int64() < _tmpW {
|
|
results = append(results, i)
|
|
_totalW -= int64(v)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
fmt.Printf("results:%v", results)
|
|
}
|