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) }