This commit is contained in:
2026-02-22 14:31:06 +08:00
parent d88178458d
commit f8f647c12a
13 changed files with 518 additions and 529 deletions

14
cache/redis/cache.go vendored
View File

@@ -5,6 +5,7 @@ package redis
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"strings"
"time" "time"
"git.apinb.com/bsm-sdk/core/errcode" "git.apinb.com/bsm-sdk/core/errcode"
@@ -15,19 +16,20 @@ import (
// prefix: 键前缀 // prefix: 键前缀
// params: 键参数 // params: 键参数
// 返回: 完整的缓存键 // 返回: 完整的缓存键
func (c *RedisClient) BuildKey(prefix string, params ...interface{}) string { func (c *RedisClient) BuildKey(prefix string, params ...any) string {
key := vars.CacheKeyPrefix + prefix var key strings.Builder
key.WriteString(vars.CacheKeyPrefix + prefix)
for _, param := range params { for _, param := range params {
key += fmt.Sprintf(":%v", param) key.WriteString(fmt.Sprintf(":%v", param))
} }
return key return key.String()
} }
// Get 获取缓存 // Get 获取缓存
// key: 缓存键 // key: 缓存键
// result: 存储结果的指针 // result: 存储结果的指针
// 返回: 错误信息 // 返回: 错误信息
func (c *RedisClient) Get(key string, result interface{}) error { func (c *RedisClient) Get(key string, result any) error {
if c.Client == nil { if c.Client == nil {
return errcode.ErrRedis return errcode.ErrRedis
} }
@@ -45,7 +47,7 @@ func (c *RedisClient) Get(key string, result interface{}) error {
// value: 缓存值 // value: 缓存值
// ttl: 过期时间 // ttl: 过期时间
// 返回: 错误信息 // 返回: 错误信息
func (c *RedisClient) Set(key string, value interface{}, ttl time.Duration) error { func (c *RedisClient) Set(key string, value any, ttl time.Duration) error {
if c.Client == nil { if c.Client == nil {
return errcode.ErrRedis return errcode.ErrRedis
} }

View File

@@ -62,7 +62,7 @@ func (t *tokenJwt) GenerateJwt(id uint, identity, client, role string, owner any
// 解析JWT // 解析JWT
func (t *tokenJwt) ParseJwt(tokenstring string) (*Claims, error) { func (t *tokenJwt) ParseJwt(tokenstring string) (*Claims, error) {
token, err := jwt.ParseWithClaims(tokenstring, &Claims{}, func(token *jwt.Token) (interface{}, error) { token, err := jwt.ParseWithClaims(tokenstring, &Claims{}, func(token *jwt.Token) (any, error) {
return []byte(t.SecretKey), nil return []byte(t.SecretKey), nil
}) })
if claims, ok := token.Claims.(*Claims); ok && token.Valid { if claims, ok := token.Claims.(*Claims); ok && token.Valid {

View File

@@ -44,7 +44,7 @@ func NewElastic(endpoints []string, username, password string) (*ES, error) {
// "time": time.Now().Unix(), // "time": time.Now().Unix(),
// "date": time.Now(), // "date": time.Now(),
// } // }
func (es *ES) CreateDocument(index string, id string, doc *interface{}) { func (es *ES) CreateDocument(index string, id string, doc *any) {
var buf bytes.Buffer var buf bytes.Buffer
if err := json.NewEncoder(&buf).Encode(doc); err != nil { if err := json.NewEncoder(&buf).Encode(doc); err != nil {
log.Println("Elastic NewEncoder:", err) log.Println("Elastic NewEncoder:", err)
@@ -75,7 +75,7 @@ func (es *ES) CreateDocument(index string, id string, doc *interface{}) {
// index 如果文档不存在就创建,如果文档存在就更新 // index 如果文档不存在就创建,如果文档存在就更新
// update 更新一个文档,如果文档不存在就返回错误 // update 更新一个文档,如果文档不存在就返回错误
// delete 删除一个文档如果要删除的文档id不存在就返回错误 // delete 删除一个文档如果要删除的文档id不存在就返回错误
func (es *ES) Batch(index string, documens []map[string]interface{}, action string) { func (es *ES) Batch(index string, documens []map[string]any, action string) {
log.SetFlags(0) log.SetFlags(0)
var ( var (
@@ -162,7 +162,7 @@ func (es *ES) Batch(index string, documens []map[string]interface{}, action stri
} }
} }
func (es *ES) Search(index string, query map[string]interface{}) (res *esapi.Response, err error) { func (es *ES) Search(index string, query map[string]any) (res *esapi.Response, err error) {
var buf bytes.Buffer var buf bytes.Buffer
if err = json.NewEncoder(&buf).Encode(query); err != nil { if err = json.NewEncoder(&buf).Encode(query); err != nil {
return return
@@ -201,7 +201,7 @@ func (es *ES) Delete(index, idx string) (res *esapi.Response, err error) {
return return
} }
func (es *ES) DeleteByQuery(index []string, query map[string]interface{}) (res *esapi.Response, err error) { func (es *ES) DeleteByQuery(index []string, query map[string]any) (res *esapi.Response, err error) {
var buf bytes.Buffer var buf bytes.Buffer
if err = json.NewEncoder(&buf).Encode(query); err != nil { if err = json.NewEncoder(&buf).Encode(query); err != nil {
return return

2
go.mod
View File

@@ -1,3 +1,3 @@
module git.apinb.com/bsm-sdk/core module git.apinb.com/bsm-sdk/core
go 1.25.1 go 1.26.0

View File

@@ -14,6 +14,7 @@ import (
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
"slices"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
@@ -135,13 +136,7 @@ func (l *Licence) VerifyLicence(licName string) bool {
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// 检查机器码是否存在授权列表中 // 检查机器码是否存在授权列表中
func (l *Licence) ValidMachineCode(code string) bool { func (l *Licence) ValidMachineCode(code string) bool {
result := false result := slices.Contains(l.MachineCodes, code)
for _, c := range l.MachineCodes {
if c == code {
result = true
break
}
}
return result return result
} }
@@ -265,7 +260,7 @@ func getMacAddrs() []string {
if err != nil { if err != nil {
return macs return macs
} }
for i := 0; i < len(netfaces); i++ { for i := range netfaces {
if (netfaces[i].Flags&net.FlagUp) != 0 && (netfaces[i].Flags&net.FlagLoopback) == 0 { if (netfaces[i].Flags&net.FlagUp) != 0 && (netfaces[i].Flags&net.FlagLoopback) == 0 {
addrs, _ := netfaces[i].Addrs() addrs, _ := netfaces[i].Addrs()
for _, address := range addrs { for _, address := range addrs {

View File

@@ -159,7 +159,7 @@ func (l *Logger) sendToRemote(level, name, out string) {
if l.endpoint == "" { if l.endpoint == "" {
return return
} }
data := map[string]interface{}{ data := map[string]any{
"level": level, "level": level,
"name": name, "name": name,
"out": out, "out": out,
@@ -169,7 +169,7 @@ func (l *Logger) sendToRemote(level, name, out string) {
} }
// Debug 输出调试信息 // Debug 输出调试信息
func (l *Logger) Debug(v ...interface{}) { func (l *Logger) Debug(v ...any) {
if l.level <= vars.DEBUG { if l.level <= vars.DEBUG {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprint(v...) out := fmt.Sprint(v...)
@@ -181,7 +181,7 @@ func (l *Logger) Debug(v ...interface{}) {
} }
// Debugf 格式化输出调试信息 // Debugf 格式化输出调试信息
func (l *Logger) Debugf(format string, v ...interface{}) { func (l *Logger) Debugf(format string, v ...any) {
if l.level <= vars.DEBUG { if l.level <= vars.DEBUG {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprintf(format, v...) out := fmt.Sprintf(format, v...)
@@ -193,7 +193,7 @@ func (l *Logger) Debugf(format string, v ...interface{}) {
} }
// Info 输出信息 // Info 输出信息
func (l *Logger) Info(v ...interface{}) { func (l *Logger) Info(v ...any) {
if l.level <= vars.INFO { if l.level <= vars.INFO {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprint(v...) out := fmt.Sprint(v...)
@@ -205,7 +205,7 @@ func (l *Logger) Info(v ...interface{}) {
} }
// Infof 格式化输出信息 // Infof 格式化输出信息
func (l *Logger) Infof(format string, v ...interface{}) { func (l *Logger) Infof(format string, v ...any) {
if l.level <= vars.INFO { if l.level <= vars.INFO {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprintf(format, v...) out := fmt.Sprintf(format, v...)
@@ -217,7 +217,7 @@ func (l *Logger) Infof(format string, v ...interface{}) {
} }
// Warn 输出警告 // Warn 输出警告
func (l *Logger) Warn(v ...interface{}) { func (l *Logger) Warn(v ...any) {
if l.level <= vars.WARN { if l.level <= vars.WARN {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprint(v...) out := fmt.Sprint(v...)
@@ -229,7 +229,7 @@ func (l *Logger) Warn(v ...interface{}) {
} }
// Warnf 格式化输出警告 // Warnf 格式化输出警告
func (l *Logger) Warnf(format string, v ...interface{}) { func (l *Logger) Warnf(format string, v ...any) {
if l.level <= vars.WARN { if l.level <= vars.WARN {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprintf(format, v...) out := fmt.Sprintf(format, v...)
@@ -241,7 +241,7 @@ func (l *Logger) Warnf(format string, v ...interface{}) {
} }
// Error 输出错误 // Error 输出错误
func (l *Logger) Error(v ...interface{}) { func (l *Logger) Error(v ...any) {
if l.level <= vars.ERROR { if l.level <= vars.ERROR {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprint(v...) out := fmt.Sprint(v...)
@@ -253,7 +253,7 @@ func (l *Logger) Error(v ...interface{}) {
} }
// Errorf 格式化输出错误 // Errorf 格式化输出错误
func (l *Logger) Errorf(format string, v ...interface{}) { func (l *Logger) Errorf(format string, v ...any) {
if l.level <= vars.ERROR { if l.level <= vars.ERROR {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprintf(format, v...) out := fmt.Sprintf(format, v...)
@@ -265,7 +265,7 @@ func (l *Logger) Errorf(format string, v ...interface{}) {
} }
// Fatal 输出致命错误并退出程序 // Fatal 输出致命错误并退出程序
func (l *Logger) Fatal(v ...interface{}) { func (l *Logger) Fatal(v ...any) {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprint(v...) out := fmt.Sprint(v...)
if l.onRemote { if l.onRemote {
@@ -276,7 +276,7 @@ func (l *Logger) Fatal(v ...interface{}) {
} }
// Fatalf 格式化输出致命错误并退出程序 // Fatalf 格式化输出致命错误并退出程序
func (l *Logger) Fatalf(format string, v ...interface{}) { func (l *Logger) Fatalf(format string, v ...any) {
l.checkAndRotateLog() l.checkAndRotateLog()
out := fmt.Sprintf(format, v...) out := fmt.Sprintf(format, v...)
if l.onRemote { if l.onRemote {
@@ -287,17 +287,17 @@ func (l *Logger) Fatalf(format string, v ...interface{}) {
} }
// Print 输出信息兼容标准log包 // Print 输出信息兼容标准log包
func (l *Logger) Print(v ...interface{}) { func (l *Logger) Print(v ...any) {
l.Info(v...) l.Info(v...)
} }
// Printf 格式化输出信息兼容标准log包 // Printf 格式化输出信息兼容标准log包
func (l *Logger) Printf(format string, v ...interface{}) { func (l *Logger) Printf(format string, v ...any) {
l.Infof(format, v...) l.Infof(format, v...)
} }
// Println 输出信息并换行兼容标准log包 // Println 输出信息并换行兼容标准log包
func (l *Logger) Println(v ...interface{}) { func (l *Logger) Println(v ...any) {
l.Info(v...) l.Info(v...)
} }
@@ -326,91 +326,91 @@ func (l *Logger) Close() error {
// 全局日志函数兼容标准log包 // 全局日志函数兼容标准log包
// Debug 全局调试日志 // Debug 全局调试日志
func Debug(v ...interface{}) { func Debug(v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Debug(v...) globalLogger.Debug(v...)
} }
} }
// Debugf 全局调试日志 // Debugf 全局调试日志
func Debugf(format string, v ...interface{}) { func Debugf(format string, v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Debugf(format, v...) globalLogger.Debugf(format, v...)
} }
} }
// Info 全局信息日志 // Info 全局信息日志
func Info(v ...interface{}) { func Info(v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Info(v...) globalLogger.Info(v...)
} }
} }
// Infof 全局信息日志 // Infof 全局信息日志
func Infof(format string, v ...interface{}) { func Infof(format string, v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Infof(format, v...) globalLogger.Infof(format, v...)
} }
} }
// Warn 全局警告日志 // Warn 全局警告日志
func Warn(v ...interface{}) { func Warn(v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Warn(v...) globalLogger.Warn(v...)
} }
} }
// Warnf 全局警告日志 // Warnf 全局警告日志
func Warnf(format string, v ...interface{}) { func Warnf(format string, v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Warnf(format, v...) globalLogger.Warnf(format, v...)
} }
} }
// Error 全局错误日志 // Error 全局错误日志
func Error(v ...interface{}) { func Error(v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Error(v...) globalLogger.Error(v...)
} }
} }
// Errorf 全局错误日志 // Errorf 全局错误日志
func Errorf(format string, v ...interface{}) { func Errorf(format string, v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Errorf(format, v...) globalLogger.Errorf(format, v...)
} }
} }
// Fatal 全局致命错误日志 // Fatal 全局致命错误日志
func Fatal(v ...interface{}) { func Fatal(v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Fatal(v...) globalLogger.Fatal(v...)
} }
} }
// Fatalf 全局致命错误日志 // Fatalf 全局致命错误日志
func Fatalf(format string, v ...interface{}) { func Fatalf(format string, v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Fatalf(format, v...) globalLogger.Fatalf(format, v...)
} }
} }
// Print 全局打印日志兼容标准log包 // Print 全局打印日志兼容标准log包
func Print(v ...interface{}) { func Print(v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Print(v...) globalLogger.Print(v...)
} }
} }
// Printf 全局打印日志兼容标准log包 // Printf 全局打印日志兼容标准log包
func Printf(format string, v ...interface{}) { func Printf(format string, v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Printf(format, v...) globalLogger.Printf(format, v...)
} }
} }
// Println 全局打印日志兼容标准log包 // Println 全局打印日志兼容标准log包
func Println(v ...interface{}) { func Println(v ...any) {
if globalLogger != nil { if globalLogger != nil {
globalLogger.Println(v...) globalLogger.Println(v...)
} }

View File

@@ -16,25 +16,25 @@ func init() {
} }
// record INFO message. Color White // record INFO message. Color White
func Info(format string, a ...interface{}) { func Info(format string, a ...any) {
message := fmt.Sprintf("\033[37m[Info] "+format+"\033[0m\n", a...) message := fmt.Sprintf("\033[37m[Info] "+format+"\033[0m\n", a...)
logger.Print(message) logger.Print(message)
} }
// record Warn message. Color Orange // record Warn message. Color Orange
func Warn(format string, a ...interface{}) { func Warn(format string, a ...any) {
message := fmt.Sprintf("\033[33m[Warn] "+format+"\033[0m\n", a...) message := fmt.Sprintf("\033[33m[Warn] "+format+"\033[0m\n", a...)
logger.Print(message) logger.Print(message)
} }
// record Success message. Color Green // record Success message. Color Green
func Success(format string, a ...interface{}) { func Success(format string, a ...any) {
message := fmt.Sprintf("\033[32m[Succ] "+format+"\033[0m\n", a...) message := fmt.Sprintf("\033[32m[Succ] "+format+"\033[0m\n", a...)
logger.Print(message) logger.Print(message)
} }
// record ERROR message. Color Red // record ERROR message. Color Red
func Error(format string, a ...interface{}) { func Error(format string, a ...any) {
message := fmt.Sprintf("\033[31m[Error] "+format+"\033[0m\n", a...) message := fmt.Sprintf("\033[31m[Error] "+format+"\033[0m\n", a...)
logger.Print(message) logger.Print(message)
} }

View File

@@ -56,7 +56,7 @@ func WeChat_Pkcs7Unpad(data []byte, blockSize int) ([]byte, error) {
if n == 0 || n > len(data) { if n == 0 || n > len(data) {
return nil, ErrInvalidPKCS7Padding return nil, ErrInvalidPKCS7Padding
} }
for i := 0; i < n; i++ { for i := range n {
if data[len(data)-n+i] != c { if data[len(data)-n+i] != c {
return nil, ErrInvalidPKCS7Padding return nil, ErrInvalidPKCS7Padding
} }

View File

@@ -1,5 +1,7 @@
package utils package utils
import "slices"
import "strings" import "strings"
// ArrayInString 判断字符串是否存在于字符串切片中 // ArrayInString 判断字符串是否存在于字符串切片中
@@ -7,24 +9,14 @@ import "strings"
// array: 需要查找的字符串切片 // array: 需要查找的字符串切片
func ArrayInString(target string, array []string) bool { func ArrayInString(target string, array []string) bool {
target = strings.TrimSpace(target) target = strings.TrimSpace(target)
for _, v := range array { return slices.Contains(array, target)
if strings.TrimSpace(v) == target {
return true
}
}
return false
} }
// ArrayInInt 判断整数是否存在于整型切片中 // ArrayInInt 判断整数是否存在于整型切片中
// target: 待匹配的目标整数 // target: 待匹配的目标整数
// array: 需要查找的整型切片 // array: 需要查找的整型切片
func ArrayInInt(target int, array []int) bool { func ArrayInInt(target int, array []int) bool {
for _, v := range array { return slices.Contains(array, target)
if v == target {
return true
}
}
return false
} }
// ArrayRemoveRepeatString 去除字符串切片中的重复元素(保持原有顺序) // ArrayRemoveRepeatString 去除字符串切片中的重复元素(保持原有顺序)

View File

@@ -103,7 +103,7 @@ func BinaryToDecimal(bit string) (num int) {
fields := strings.Split(bit, "") fields := strings.Split(bit, "")
lens := len(fields) lens := len(fields)
var tempF float64 = 0 var tempF float64 = 0
for i := 0; i < lens; i++ { for i := range lens {
floatNum := String2Float64(fields[i]) floatNum := String2Float64(fields[i])
tempF += floatNum * math.Pow(2, float64(lens-i-1)) tempF += floatNum * math.Pow(2, float64(lens-i-1))
} }

View File

@@ -5,7 +5,7 @@ import (
"strings" "strings"
) )
func If(condition bool, trueValue, falseValue interface{}) interface{} { func If(condition bool, trueValue, falseValue any) any {
if condition { if condition {
return trueValue return trueValue
} }
@@ -21,8 +21,8 @@ func FirstToUpper(str string) string {
return strings.ToUpper(str[:1]) + strings.ToLower(str[1:]) return strings.ToUpper(str[:1]) + strings.ToLower(str[1:])
} }
func ParseParams(in map[string]string) map[string]interface{} { func ParseParams(in map[string]string) map[string]any {
out := make(map[string]interface{}) out := make(map[string]any)
for k, v := range in { for k, v := range in {
fv, err := strconv.ParseFloat(v, 64) fv, err := strconv.ParseFloat(v, 64)
if err != nil { if err != nil {

View File

@@ -341,8 +341,8 @@ func GenerateQRCodeWithLogo(content, logoPath string, size ...int) ([]byte, erro
// 绘制Logo // 绘制Logo
logoOriginalBounds := logoImage.Bounds() logoOriginalBounds := logoImage.Bounds()
for y := 0; y < logoSize; y++ { for y := range logoSize {
for x := 0; x < logoSize; x++ { for x := range logoSize {
// 计算原始Logo的对应像素 // 计算原始Logo的对应像素
origX := x * logoOriginalBounds.Dx() / logoSize origX := x * logoOriginalBounds.Dx() / logoSize
origY := y * logoOriginalBounds.Dy() / logoSize origY := y * logoOriginalBounds.Dy() / logoSize

View File

@@ -9,7 +9,7 @@ func RandomString(l int) string {
str := "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" str := "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
bytes := []byte(str) bytes := []byte(str)
var result []byte = make([]byte, 0, l) var result []byte = make([]byte, 0, l)
for i := 0; i < l; i++ { for range l {
result = append(result, bytes[rand.IntN(len(bytes))]) result = append(result, bytes[rand.IntN(len(bytes))])
} }
return string(result) return string(result)
@@ -20,7 +20,7 @@ func RandomPureString(l int) string {
str := "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" str := "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
bytes := []byte(str) bytes := []byte(str)
var result []byte = make([]byte, 0, l) var result []byte = make([]byte, 0, l)
for i := 0; i < l; i++ { for range l {
result = append(result, bytes[rand.IntN(len(bytes))]) result = append(result, bytes[rand.IntN(len(bytes))])
} }
return string(result) return string(result)
@@ -31,7 +31,7 @@ func RandomPureUpString(l int) string {
str := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" str := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
bytes := []byte(str) bytes := []byte(str)
var result []byte = make([]byte, 0, l) var result []byte = make([]byte, 0, l)
for i := 0; i < l; i++ { for range l {
result = append(result, bytes[rand.IntN(len(bytes))]) result = append(result, bytes[rand.IntN(len(bytes))])
} }
return string(result) return string(result)
@@ -42,7 +42,7 @@ func RandomNumber(l int) string {
str := "0123456789" str := "0123456789"
bytes := []byte(str) bytes := []byte(str)
var result []byte var result []byte
for i := 0; i < l; i++ { for range l {
result = append(result, bytes[rand.IntN(len(bytes))]) result = append(result, bytes[rand.IntN(len(bytes))])
} }
return string(result) return string(result)