You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
3.5 KiB
201 lines
3.5 KiB
package utils |
|
|
|
import ( |
|
"bytes" |
|
"context" |
|
"fmt" |
|
"github.com/gogf/gf/v2/frame/g" |
|
"log" |
|
"math/rand" |
|
"os" |
|
"os/exec" |
|
"strconv" |
|
"strings" |
|
"time" |
|
"tyj_admin/internal/model/entity" |
|
) |
|
|
|
// int |
|
func RandInt(min int, max int) int { |
|
return min + rand.Intn(max-min) |
|
} |
|
|
|
// int |
|
func RandInt32(min int32, max int32) int32 { |
|
return min + rand.Int31n(max-min) |
|
} |
|
|
|
// float |
|
func RandomFloat(min, max int) float64 { |
|
if max == min { |
|
return float64(max) |
|
} |
|
return decimal(rand.Float64()*(float64(max)-float64(min)) + float64(min)) |
|
} |
|
|
|
func decimal(v float64) float64 { |
|
val, _ := strconv.ParseFloat(fmt.Sprintf("%.3f", v), 64) |
|
return val |
|
} |
|
func RandomByWeight(weights []int32) int32 { |
|
if len(weights) == 0 { |
|
return -1 |
|
} |
|
if len(weights) == 1 { |
|
return 0 |
|
} |
|
|
|
var sum int32 = 0 |
|
for _, v := range weights { |
|
sum += v |
|
} |
|
|
|
numberRand := rand.Int31n(sum) |
|
var sumTemp int32 = 0 |
|
for k, v := range weights { |
|
sumTemp += v |
|
if numberRand <= sumTemp { |
|
return int32(k) |
|
} |
|
} |
|
|
|
return -1 |
|
} |
|
func RandomByWeightInt(weights []int32) int { |
|
if len(weights) == 0 { |
|
return -1 |
|
} |
|
if len(weights) == 1 { |
|
return 0 |
|
} |
|
|
|
var sum int32 = 0 |
|
for _, v := range weights { |
|
sum += v |
|
} |
|
|
|
numberRand := rand.Int31n(sum) |
|
var sumTemp int32 = 0 |
|
for k, v := range weights { |
|
sumTemp += v |
|
if numberRand <= sumTemp { |
|
return k |
|
} |
|
} |
|
|
|
return -1 |
|
} |
|
|
|
func ContainsGeneric(slice []interface{}, element interface{}) bool { |
|
for _, e := range slice { |
|
if e == element { |
|
return true |
|
} |
|
} |
|
|
|
return false |
|
} |
|
|
|
func ContainsString(slice []string, element string) bool { |
|
for _, e := range slice { |
|
if e == element { |
|
return true |
|
} |
|
} |
|
|
|
return false |
|
} |
|
|
|
func DeleteSlice1(a []string, elem string) []string { |
|
for i := 0; i < len(a); i++ { |
|
if a[i] == elem { |
|
a = append(a[:i], a[i+1:]...) |
|
i-- |
|
} |
|
} |
|
return a |
|
} |
|
|
|
func TopIpWhiteList(ip string) bool { |
|
ipList := [1]string{"192.168.2.115"} |
|
for _, v := range ipList { |
|
if v == ip { |
|
return true |
|
} |
|
} |
|
|
|
return false |
|
} |
|
|
|
func ContainsWhiteList(slice []*entity.GameWhiteList, element string) bool { |
|
for _, e := range slice { |
|
if e.Ip == element { |
|
return true |
|
} |
|
} |
|
|
|
return false |
|
} |
|
|
|
func ContainsBlackList(slice []*entity.GameBlackList, element string) bool { |
|
for _, e := range slice { |
|
if e.Ip == element { |
|
return true |
|
} |
|
} |
|
|
|
return false |
|
} |
|
|
|
func Check(e error) { |
|
if e != nil { |
|
panic(e) |
|
} |
|
} |
|
|
|
/** |
|
* 判断文件是否存在 存在返回 true 不存在返回false |
|
*/ |
|
func CheckFileIsExist(filename string) bool { |
|
var exist = true |
|
if _, err := os.Stat(filename); os.IsNotExist(err) { |
|
exist = false |
|
} |
|
return exist |
|
} |
|
|
|
func CmdCommand(ctx context.Context, name string, args ...string) (err error) { |
|
err = g.Try(ctx, func(ctx context.Context) { |
|
cmd := exec.Command(name, args...) |
|
var stdout, stderr bytes.Buffer |
|
cmd.Stdout = &stdout // 标准输出 |
|
cmd.Stderr = &stderr // 标准错误 |
|
err = cmd.Run() |
|
if err != nil { |
|
log.Printf("cmd.Run() failed with %s\n", err) |
|
return |
|
} |
|
outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes()) |
|
fmt.Printf("out:\n%s\nerr:\n%s\n", outStr, errStr) |
|
}) |
|
return |
|
} |
|
|
|
const charset = "0123456789" |
|
|
|
var seededRand *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano())) |
|
|
|
func GenerateRandomString(length int) string { |
|
b := make([]byte, length) |
|
for i := range b { |
|
b[i] = charset[seededRand.Intn(len(charset))] |
|
} |
|
return string(b) |
|
} |
|
|
|
func GetAccount(account, channel string) string { |
|
if channel == "000000000000" && !strings.Contains(account, channel) { |
|
account = channel + account |
|
} |
|
return account |
|
}
|
|
|