Apply .gitignore rules

This commit is contained in:
皮蛋13361098506
2025-01-06 16:21:36 +08:00
parent 1b77f62820
commit ccd2c530cf
580 changed files with 69806 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
package sensitiveWordsMgr
import (
"testing"
)
// type Persion struct {
// name string
// }
// 屏蔽字详细信息
func Test1(t *testing.T) {
//启动获取敏感字
refreshSensitiveWord()
words, pos, exist := SensitiveWords("测试,测试")
if exist {
t.Log(words, pos)
}
t.Log("END")
}

View File

@@ -0,0 +1,377 @@
package utils
import (
"bytes"
"compress/flate"
"encoding/json"
"fmt"
"goutil/logUtilPlus"
"io/ioutil"
"math/rand"
"net/http"
"runtime/debug"
"strconv"
"strings"
"time"
)
// 定义常量
var MinDateTime = time.Date(2000, 1, 1, 0, 0, 0, 0, time.Local)
var MaxDateTime = time.Date(3000, 1, 1, 0, 0, 0, 0, time.Local)
var GuidEmpty = "00000000-0000-0000-0000-000000000000"
// IsTrue
// @description: 是否为true
// parameter:
// @data: []byte格式的bool信息
// return:
// @bool: 返回布尔值
func IsTrue(data []byte) bool {
if data == nil {
return false
}
if len(data) == 0 {
return false
}
if data[0] == 0 {
return false
} else {
return true
}
}
// ConvertBooleanToBytes
// @description: bool型转换成byte数组
// parameter:
// @status: 状态
// return:
// @[]byte: 返回字节数组
func ConvertBooleanToBytes(status bool) []byte {
if status == false {
return []byte{0}
} else {
return []byte{1}
}
}
// StrSliceJoinToStr
// @description: 将[]string组装成字符串
// parameter:
// @numArray: 源int32数组
// @sep: 分割字符串
// return:
// @string: 组成的字符串
func StrSliceJoinToStr(numArray []string, sep string) string {
str := ""
if numArray == nil || len(numArray) == 0 {
return str
}
for _, n := range numArray {
str += fmt.Sprintf("%s%s", n, sep)
}
str = strings.TrimSuffix(str, sep)
return str
}
// Int32SliceJoinToStr
// @description: 将[]int32转换成字符串
// parameter:
// @source: 资源
// @sep: 分隔符
// return:
// @result: 字符串
func Int32SliceJoinToStr(source []int32, sep string) (result string) {
if source == nil || len(source) == 0 {
return ""
}
for _, s := range source {
result += fmt.Sprintf("%d%s", s, sep)
}
result = strings.TrimRight(result, sep)
return
}
// SplitToStrSlice
// @description: 将字符串切割为[]string
// parameter:
// @s: 输入字符串
// @sep: 分割字符串
// @removeEmpty: 是否去除空字符串
// return:
// @resultSlice: 字符串列表
func SplitToStrSlice(s, sep string, removeEmpty bool) (resultSlice []string) {
if len(s) == 0 {
return make([]string, 0)
}
// 先按照分隔符进行切割
strSlice := strings.Split(s, sep)
for _, value := range strSlice {
if removeEmpty {
// 去除空格
if value = strings.TrimSpace(value); value == "" {
continue
}
}
resultSlice = append(resultSlice, value)
}
return resultSlice
}
// ParseTimeString
// @description: 解析时间字符串
// parameter:
// @timeStr: 时间字符串12:33:12
// return:
// @hour: 小时
// @minute: 分钟
// @second: 秒数
func ParseTimeString(timeStr string) (hour int, minute int, second int) {
timeSlice := strings.Split(timeStr, ":")
if len(timeSlice) != 3 {
return
}
hour, _ = strconv.Atoi(timeSlice[0])
minute, _ = strconv.Atoi(timeSlice[1])
second, _ = strconv.Atoi(timeSlice[2])
return
}
// Rm_duplicate_string
// @description: 去重
// parameter:
// @list: 列表
// return:
// @[]string: 去重后的数据
func Rm_duplicate_string(list []string) []string {
var x []string = []string{}
for _, i := range list {
if len(x) == 0 {
x = append(x, i)
} else {
for k, v := range x {
if i == v {
break
}
if k == len(x)-1 {
x = append(x, i)
}
}
}
}
return x
}
// Rm_duplicate_int32
// @description: 去重
// parameter:
// @list: 列表数据
// return:
// @[]int32: 去重后的结果
func Rm_duplicate_int32(list []int32) []int32 {
var x []int32 = []int32{}
for _, i := range list {
if len(x) == 0 {
x = append(x, i)
} else {
for k, v := range x {
if i == v {
break
}
if k == len(x)-1 {
x = append(x, i)
}
}
}
}
return x
}
// RandomAarrayOfInt32
// @description: int32数组乱序
// parameter:
// @arr: 数组
// return:
func RandomAarrayOfInt32(arr []int32) {
if arr == nil {
return
}
if len(arr) <= 0 {
return
}
rand.Seed(time.Now().UnixNano())
for i := len(arr) - 1; i > 0; i-- {
num := rand.Intn(i + 1)
arr[i], arr[num] = arr[num], arr[i]
}
}
// RandomAarrayOfString
// @description: string数组乱序
// parameter:
// @arr: 数组
// return:
func RandomAarrayOfString(arr []string) {
if arr == nil {
return
}
if len(arr) <= 0 {
return
}
rand.Seed(time.Now().UnixNano())
for i := len(arr) - 1; i > 0; i-- {
num := rand.Intn(i + 1)
arr[i], arr[num] = arr[num], arr[i]
}
}
// LogErrorRecover
// @description: 记录错误
// parameter:
// return:
func LogErrorRecover() {
if err := recover(); err != nil {
tmsg := fmt.Sprintf("err msg:%s stack:%s", err, debug.Stack())
logUtilPlus.ErrorLog(tmsg)
}
}
// LogReqErrorRecover
// @description: 记录错误
// parameter:
// @r:
// return:
func LogReqErrorRecover(r *http.Request) {
if err := recover(); err != nil {
b, err := json.Marshal(r)
reqStr := ""
if err == nil {
reqStr = string(b)
}
tmsg := fmt.Sprintf("RequestInfo:%s .err msg:%s stack:%s", reqStr, err, debug.Stack())
logUtilPlus.ErrorLog(tmsg)
}
}
// StringSliceIsExists
// @description: StringSliceIsExists
// parameter:
// @strList: strList
// @val: val
// return:
// @bool: 是否存在
func StringSliceIsExists(strList []string, val string) bool {
if strList == nil {
return false
}
for _, v := range strList {
if v == val {
return true
}
}
return false
}
// Int64SliceIsExists
// @description: Int64SliceIsExists
// parameter:
// @strList: strList
// @val: val
// return:
// @bool: 是否存在
func Int64SliceIsExists(strList []int64, val int64) bool {
if strList == nil {
return false
}
for _, v := range strList {
if v == val {
return true
}
}
return false
}
// SliceIsExists
// @description: SliceIsExists
// parameter:
// @n: n
// @f: f
// return:
// @bool: 是否存在
func SliceIsExists(n int, f func(int) bool) bool {
for i := 0; i < n; i++ {
if f(i) {
return true
}
}
return false
}
// FlateEncode
// @description: 压缩字符串
// parameter:
// @input: 输入字符列表
// return:
// @result: 结果字符列表
// @err: 错误信息
func FlateEncode(input []byte) (result []byte, err error) {
var buf bytes.Buffer
w, err := flate.NewWriter(&buf, flate.DefaultCompression)
if err != nil {
return nil, err
}
// 无法使用defer close使用无法拿到结果
_, err = w.Write(input)
if err != nil {
return nil, err
}
w.Close()
result = buf.Bytes()
return
}
// FlateDecode
// @description: FlateDecode
// parameter:
// @input: 输入字符列表
// return:
// @result: 结果字符列表
// @err: 错误信息
func FlateDecode(input []byte) (result []byte, err error) {
result, err = ioutil.ReadAll(flate.NewReader(bytes.NewReader(input)))
return
}

View File

@@ -0,0 +1,34 @@
package admin
import (
"common/connection"
)
func init() {
//注册数据库
connection.RegisterDBModel(&Admin{})
}
type Admin struct {
ID int64 `gorm:"column:id;primary_key;comment:管理员id;autoIncrementIncrement" json:"id"`
//账号
Account string `gorm:"column:account;comment:账号" json:"account"`
Name string `gorm:"column:name;comment:管理员名称" json:"name"`
Password string `gorm:"column:password;comment:管理员密码" json:"password"`
//性别
Sex int32 `gorm:"column:sex;comment:性别" json:"sex"`
//生日
Birthday string `gorm:"column:birthday;comment:生日" json:"birthday"`
//手机
Phone int64 `gorm:"column:phone;comment:手机" json:"phone"`
//邮箱
Email string `gorm:"column:email;comment:邮箱" json:"email"`
//微信群【方便发送通知】
WechatGroup string `gorm:"column:wechat_group;comment:微信群" json:"wechat_group"`
//备注
Describe string `gorm:"column:describe;comment:备注" json:"describe"`
}
func (Admin) TableName() string {
return "admin"
}

View File

@@ -0,0 +1,62 @@
package validationUtil
import (
"testing"
)
// 身份证测试
func TestIdCard(t *testing.T) {
idno := "450325197410077393"
if IsValideIdno(idno) == false {
t.Error("身份证验证出错:", idno)
t.Fail()
}
idno = "36062219701120774X"
if IsValideIdno(idno) == false {
t.Error("身份证验证出错:", idno)
t.Fail()
}
idno = "450325197410071111"
if IsValideIdno(idno) == false {
t.Error("身份证验证出错:", idno)
t.Fail()
}
idno = "3123123123"
if IsValideIdno(idno) == true {
t.Error("身份证验证出错:", idno)
t.Fail()
}
}
// 邮箱测试
func TestMail(t *testing.T) {
mail := "nihao@qq.com"
if IsValideEmail(mail) == false {
t.Error("邮箱验证出错:", mail)
t.Fail()
}
mail = "111@qq.com"
if IsValideEmail(mail) == false {
t.Error("邮箱验证出错:", mail)
t.Fail()
}
mail = "111_@qq.com"
if IsValideEmail(mail) == false {
t.Error("邮箱验证出错:", mail)
t.Fail()
}
}
// 验证中国的手机号
func TestChinesePhone(t *testing.T) {
phoneNum := "15111111111"
if IsValideChinesePhoneNum(phoneNum) == false {
t.Error("手机号验证出错:", phoneNum)
t.Fail()
}
phoneNum = "11111"
if IsValideChinesePhoneNum(phoneNum) == true {
t.Error("手机号验证出错:", phoneNum)
t.Fail()
}
}

View File

@@ -0,0 +1,137 @@
package mysqlUtil
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"goutil/logUtil"
)
// 打开数据库连接
// connectionString数据库连接字符串格式root:moqikaka3306@tcp(10.1.0.10:3306)/gameserver_data?charset=utf8&parseTime=true&loc=Local&timeout=60s||MaxOpenConns=10||MaxIdleConns=5
// 返回值:
// 数据库对象
// 错误对象
func OpenMysqlConnection(connectionString string) (dbObj *sql.DB, err error) {
dbConfigObj, err1 := NewDBConfig2(connectionString)
if err1 != nil {
err = err1
return
}
dbObj, err = OpenMysqlConnection3(dbConfigObj)
return
}
// 打开数据库连接
// connectionString数据库连接字符串
// maxOpenConns最大打开的连接数
// maxIdleConns最大处于闲置状态的连接数
// 返回值:
// 数据库对象
// 错误对象
func OpenMysqlConnection2(connectionString string, maxOpenConns, maxIdleConns int) (dbObj *sql.DB, err error) {
dbConfigObj := NewDBConfig(connectionString, maxOpenConns, maxIdleConns)
dbObj, err = OpenMysqlConnection3(dbConfigObj)
return
}
// 建立Mysql数据库连接
// dbConfigObj数据库配置对象
// 返回值:
// 数据库对象
// 错误对象
func OpenMysqlConnection3(dbConfigObj *DBConfig) (dbObj *sql.DB, err error) {
// 建立数据库连接
logUtil.DebugLog("开始连接Mysql数据库")
dbObj, err = sql.Open("mysql", dbConfigObj.ConnectionString)
if err != nil {
err = fmt.Errorf("打开游戏数据库失败,连接字符串为:%s", dbConfigObj.ConnectionString)
return
}
logUtil.DebugLog("连接Mysql数据库成功")
if dbConfigObj.MaxOpenConns > 0 && dbConfigObj.MaxIdleConns > 0 {
dbObj.SetMaxOpenConns(dbConfigObj.MaxOpenConns)
dbObj.SetMaxIdleConns(dbConfigObj.MaxIdleConns)
}
if err = dbObj.Ping(); err != nil {
err = fmt.Errorf("Ping数据库失败,连接字符串为:%s,错误信息为:%s", dbConfigObj.ConnectionString, err)
return
}
return
}
// 测试数据库连接
// dbObj:数据库连对象
// 返回值:
// 错误对象
func TestConnection(dbObj *sql.DB) error {
command := "SHOW DATABASES;"
rows, err := dbObj.Query(command)
if err != nil {
return err
}
defer rows.Close()
return nil
}
// 开始事务
// db:数据库对象
// 返回值:
// 事务对象
// 错误对象
func BeginTransaction(dbObj *sql.DB) (*sql.Tx, error) {
tx, err := dbObj.Begin()
if err != nil {
logUtil.Log(fmt.Sprintf("开启事务失败,错误信息:%s", err), logUtil.Error, true)
}
return tx, err
}
// 提交事务
// tx:事务对象
// 返回值:
// 错误对象
func CommitTransaction(tx *sql.Tx) error {
err := tx.Commit()
if err != nil {
logUtil.Log(fmt.Sprintf("提交事务失败,错误信息:%s", err), logUtil.Error, true)
}
return err
}
// 记录Prepare错误
// command执行的SQL语句
// err错误对象
func WritePrepareError(command string, err error) {
logUtil.Log(fmt.Sprintf("Prepare失败错误信息%scommand:%s", err, command), logUtil.Error, true)
}
// 记录Query错误
// command执行的SQL语句
// err错误对象
func WriteQueryError(command string, err error) {
logUtil.Log(fmt.Sprintf("Query失败错误信息%scommand:%s", err, command), logUtil.Error, true)
}
// 记录Exec错误
// command执行的SQL语句
// err错误对象
func WriteExecError(command string, err error) {
logUtil.Log(fmt.Sprintf("Exec失败错误信息%scommand:%s", err, command), logUtil.Error, true)
}
// 记录Scan错误
// command执行的SQL语句
// err错误对象
func WriteScanError(command string, err error) {
logUtil.Log(fmt.Sprintf("Scan失败错误信息%scommand:%s", err, command), logUtil.Error, true)
}