Files
utility_go/README.md
ayflying 713a63356e 优化游戏数据批量持久化性能
- gameAct: 新增SaveV2Batch批量处理方法
  - 使用Redis MGET批量获取替代逐个GET
  - 使用WHERE uid IN批量查询替代逐个查询
  - 使用Batch批量插入替代逐条SQL
  - 修复: 只有数据库写入成功后才删除Redis key

- gameKv: 新增SavesV2Batch批量处理方法
  - 同样的批量优化策略
  - 修复: 只有数据库写入成功后才删除Redis key

- service: 更新接口定义添加新方法

性能提升: 1000条数据从1000次网络请求减少到2-3次
2026-02-26 15:44:14 +08:00

15 KiB
Raw Blame History

utility_go

Go Version License GitHub stars

一个功能丰富的Go语言工具类库提供支付集成、缓存管理、排名算法、数据库操作、系统管理等核心功能模块适用于各类Go项目开发。

核心特性

  • 🔧 多模块集成: 支付、缓存、排名、数据库、系统管理等完整解决方案
  • 高性能: 基于Redis的高性能排名算法和缓存管理
  • 📱 支付支持: 集成Apple Pay、Google Play Store、支付宝、微信支付等主流支付平台
  • 🛠️ CLI工具: 提供代码生成器,快速创建模块文件
  • 📊 监控告警: 集成Prometheus监控和系统日志管理
  • 🌐 多存储支持: 支持S3对象存储、Elasticsearch搜索引擎

📦 安装

go get github.com/ayflying/utility_go

🏗️ 项目结构

utility_go/
├── api/                    # API接口定义 (protobuf)
│   └── system/             # 系统API
├── aycache/                # Aycache缓存实现
├── cmd/                    # CLI命令工具
│   ├── make.go             # 代码生成器
│   ├── load.go             # 配置加载
│   ├── update.go           # 更新工具
│   └── middleware.go       # 中间件工具
├── config/                 # 配置管理
├── controller/            # 控制器层
│   └── callback/           # 回调控制器
├── internal/               # 内部核心逻辑
│   ├── boot/               # 启动初始化
│   ├── game/               # 游戏逻辑
│   ├── logic/              # 业务逻辑
│   │   ├── casdoor/        # 认证逻辑
│   │   ├── gameAct/        # 游戏活动
│   │   ├── gameKv/         # 游戏键值存储
│   │   ├── ip2region/      # IP区域查询
│   │   ├── logData/        # 日志处理
│   │   ├── os/             # 系统操作
│   │   ├── systemCron/     # 定时任务
│   │   └── systemLog/       # 系统日志
│   └── model/              # 数据模型
│       ├── do/             # 数据对象
│       └── entity/         # 实体定义
├── package/                # 功能包
│   ├── aycache/            # 缓存管理
│   ├── excel/              # Excel处理
│   ├── gamelog/            # 游戏日志
│   ├── pay/                # 支付集成
│   │   ├── alipay/         # 支付宝
│   │   ├── apple/          # Apple Pay
│   │   ├── playstore/      # Google Play
│   │   ├── wechat/         # 微信支付
│   │   ├── xiaomi/         # 小米支付
│   │   ├── vivo/           # Vivo支付
│   │   ├── oppo/           # OPPO支付
│   │   ├── huawei/         # 华为支付
│   │   ├── honor/          # 荣耀支付
│   │   ├── taptap/         # TapTap支付
│   │   └── chongchong/     # 充值渠道
│   ├── rank/               # 排名算法
│   └── s3/                 # S3存储
├── pkg/                    # 公共包
│   ├── config/             # 配置包
│   ├── elasticsearch/      # ES包
│   ├── notice/             # 通知包
│   ├── rank/               # 排名包
│   └── s3/                 # S3包
├── service/                # 服务层
│   ├── casdoor.go          # 认证服务
│   ├── game_act.go         # 游戏活动服务
│   ├── game_kv.go          # 键值存储服务
│   ├── ip_2_region.go      # IP地理位置服务
│   ├── log_data.go         # 日志数据服务
│   ├── os.go               # 操作系统服务
│   ├── system_cron.go      # 定时任务服务
│   └── system_log.go       # 系统日志服务
├── tools/                  # 工具函数
│   ├── random.go           # 随机数
│   ├── redis.go            # Redis操作
│   ├── time.go             # 时间处理
│   └── tools.go            # 通用工具
├── utility.go              # 主入口
├── go.mod                  # 模块定义
└── README.md               # 说明文档

utility_go/ ├── api/ # API接口定义 │ ├── admin/ # 管理后台API │ ├── callback/ # 回调接口 │ ├── system/ # 系统API │ └── pkg/ # 包相关API ├── cmd/ # CLI命令工具 │ ├── make.go # 代码生成器 │ ├── load.go # 配置加载 │ ├── update.go # 更新工具 │ └── middleware.go # 中间件工具 ├── controller/ # 控制器层 │ └── callback/ # 回调控制器 ├── service/ # 服务层 │ ├── casdoor.go # 认证服务 │ ├── game_act.go # 游戏活动服务 │ ├── game_kv.go # 键值存储服务 │ ├── ip_2_region.go # IP地理位置服务 │ ├── log_data.go # 日志数据服务 │ ├── os.go # 操作系统服务 │ ├── system_cron.go # 定时任务服务 │ └── system_log.go # 系统日志服务 ├── internal/ # 内部核心逻辑 │ ├── boot/ # 启动初始化 │ ├── game/ # 游戏逻辑 │ ├── logic/ # 业务逻辑 │ │ ├── casdoor/ # 认证逻辑 │ │ ├── gameAct/ # 游戏活动 │ │ ├── gameKv/ # 游戏键值存储 │ │ ├── ip2region/ # IP区域查询 │ │ ├── logData/ # 日志处理 │ │ ├── os/ # 系统操作 │ │ ├── systemCron/ # 定时任务 │ │ └── systemLog/ # 系统日志 │ └── model/ # 数据模型 │ ├── do/ # 数据对象 │ └── entity/ # 实体定义 ├── package/ # 功能包 │ ├── aycache/ # 缓存管理 │ ├── excel/ # Excel处理 │ ├── gamelog/ # 游戏日志 │ ├── pay/ # 支付集成 │ │ ├── alipay/ # 支付宝 │ │ ├── apple/ # Apple Pay │ │ ├── google/ # Google Play │ │ ├── wechat/ # 微信支付 │ │ ├── playstore/ # Play Store │ │ └── ... # 其他支付平台 │ ├── rank/ # 排名算法 │ └── s3/ # S3存储 ├── pkg/ # 公共包 │ ├── aycache/ # 缓存包 │ ├── config/ # 配置包 │ ├── elasticsearch/ # ES包 │ ├── notice/ # 通知包 │ ├── rank/ # 排名包 │ └── s3/ # S3包 ├── tools/ # 工具函数 │ ├── random.go # 随机数 │ ├── redis.go # Redis操作 │ ├── time.go # 时间处理 │ └── tools.go # 通用工具 ├── utility.go # 主入口 ├── go.mod # 模块定义 └── README.md # 说明文档


## 🚀 快速开始

### 1. 初始化项目

```go
package main

import (
    _ "github.com/ayflying/utility_go"
    "github.com/gogf/gf/v2/frame/g"
)

func main() {
    g.Log().Info(nil, "项目启动成功")
}

2. 使用CLI工具生成代码

# 创建活动模块
go run main.go make -m act -i 1

# 创建逻辑模块
go run main.go make -m logic -n test

# 创建配置文件
go run main.go make -m config -n test

# 创建Socket模块
go run main.go make -m socket -n test

📚 核心模块详解

🔐 支付模块 (package/pay)

支持多种支付平台集成:

Google Play Store

import "github.com/ayflying/utility_go/package/pay/playstore"

// 创建客户端
client, err := playstore.New(jsonKey)

// 验证签名
isValid, err := playstore.VerifySignature(publicKey, receipt, signature)

Apple Pay

import "github.com/ayflying/utility_go/package/pay/apple"

// 处理Apple支付验证

支付宝/微信支付

import (
    "github.com/ayflying/utility_go/package/pay/alipay"
    "github.com/ayflying/utility_go/package/pay/wechat"
)

Vivo 支付

import "github.com/ayflying/utility_go/package/pay/vivo"

// 创建vivo支付客户端
client := vivo.NewClient(appId, appKey, businessId)

// 验证支付回调
result, err := client.VerifyNotification(notifyReq)

小米支付

import "github.com/ayflying/utility_go/package/pay/xiaomi"

// 处理小米支付回调
result, err := xiaomi.VerifyPayment(orderId, signature, requestBody)

OPPO 支付

import "github.com/ayflying/utility_go/package/pay/oppo"

// 创建OPPO支付客户端
client := oppo.NewClient(apiKey, apiSecret)

// 验证订单
orderInfo, err := client.VerifyOrder(serverOrderId)

华为支付

import "github.com/ayflying/utility_go/package/pay/huawei"

// 处理华为支付通知
notification, err := huawei.ParseNotification(requestBody)

TapTap 支付

import "github.com/ayflying/utility_go/package/pay/taptap"

// 验证TapTap签名
isValid := taptap.VerifySign(params, signature)

荣耀支付

import "github.com/ayflying/utility_go/package/pay/honor"

// 处理荣耀支付回调
result, err := honor.ParseNotification(requestBody)

充值渠道支付

import "github.com/ayflying/utility_go/package/pay/chongchong"

// 充值渠道订单验证
result, err := chongchong.VerifyOrder(orderId, channelOrderId)

🏆 排名模块 (package/rank)

基于Redis的高性能排行榜实现

import "github.com/ayflying/utility_go/pkg/rank"

// 创建排行榜
rankMod := rank.New()
leaderboard := rankMod.CreateF64CountRank("season_1")

// 增加分数
curScore, err := leaderboard.IncrScore(userID, 100)

// 设置分数
err := leaderboard.SetScore(userID, 500)

// 获取排名信息
rankInfo, err := leaderboard.GetRankInfosNotTs(0, 10)

💾 缓存模块 (package/aycache)

import "github.com/ayflying/utility_go/package/aycache"

// 使用缓存
cache := aycache.New()

📊 数据库操作

Elasticsearch

import "github.com/ayflying/utility_go/package/elasticsearch"

// ES操作

MySQL (基于GoFrame)

import "github.com/gogf/gf/v2/database/gdb"

🔄 定时任务 (systemCron)

import "github.com/ayflying/utility_go/service"

// 添加定时任务
service.SystemCron().AddCronV2(v1.CronType_HOUR, func(ctx context.Context) error {
    // 执行任务
    return nil
}, true)

📝 日志管理 (systemLog)

import "github.com/ayflying/utility_go/service"

// 记录日志
service.SystemLog().Info("操作成功")
service.SystemLog().Error("操作失败: %v", err)

🌐 IP地理位置查询 (ip2region)

import "github.com/ayflying/utility_go/service"

// 查询IP位置
ipInfo, err := service.Ip2Region().Search("192.168.1.1")

📁 S3存储 (s3)

import "github.com/ayflying/utility_go/package/s3"

// 列出存储桶
buckets, err := s3.ListBuckets()

// 上传文件
err := s3.UploadFile("bucket-name", "file-key", fileData)

📑 Excel处理 (excel)

import "github.com/ayflying/utility_go/package/excel"

// 读取Excel
data, err := excel.Read("file.xlsx")

// 导出Excel
err := excel.Export(data, "output.xlsx")

🛠️ 配置管理

项目使用GoFrame框架的配置管理

import (
    "github.com/ayflying/utility_go/config"
    "github.com/gogf/gf/v2/frame/g"
)

// 获取配置
cfg := config.Cfg{}
dbConfig := g.Cfg().Get("database")

🔧 工具函数

时间处理 (tools/time.go)

import "github.com/ayflying/utility_go/tools"

// 获取本周开始时间
weekStart := tools.GetWeekStart()

// 计算天数差
days := tools.DiffDays(startTime, endTime)

Redis操作 (tools/redis.go)

// 批量获取数据
data, err := tools.ScanRedis(pattern)

通用工具 (tools/tools.go)

// 字符串转道具类型
items := tools.Tools.Spilt2Item("1|10|2|20")

// 切片转道具类型
items := tools.Tools.Slice2Item([]int64{1, 10, 2, 20})

// 道具格式转Map
itemMap := tools.Tools.Items2Map(items)

🎯 使用示例

完整的支付验证流程

package main

import (
    "fmt"
    "github.com/ayflying/utility_go/package/pay/playstore"
)

func main() {
    // Google Play Store应用内购买验证
    purchaseData := "purchase_data_string"
    signature := "signature_string"
    publicKey := "base64_encoded_public_key"
    
    isValid, err := playstore.VerifySignature(publicKey, []byte(purchaseData), signature)
    if err != nil {
        fmt.Println("验证失败:", err)
        return
    }
    
    if isValid {
        fmt.Println("支付验证成功")
    }
}

排行榜使用示例

package main

import (
    "fmt"
    "github.com/ayflying/utility_go/pkg/rank"
)

func main() {
    rankMod := rank.New()
    leaderboard := rankMod.CreateF64CountRank("game_season_1")
    
    // 用户得分
    score, err := leaderboard.IncrScore(1001, 50)
    if err != nil {
        fmt.Println("更新分数失败:", err)
        return
    }
    
    fmt.Printf("当前分数: %.0f\n", score)
    
    // 获取前10名
    top10, err := leaderboard.GetRankInfosNotTs(0, 9)
    if err != nil {
        fmt.Println("获取排名失败:", err)
        return
    }
    
    for i, info := range top10 {
        fmt.Printf("第%d名: 用户%d - 分数%d\n", i+1, info.Id, info.Score)
    }
}

⚙️ 开发指南

代码规范

  • 使用GoFrame框架的最佳实践
  • 遵循Go语言命名规范
  • 添加必要的注释和文档
  • 使用错误处理和日志记录

项目启动流程

  1. 配置文件加载
  2. 数据库连接初始化
  3. 缓存系统初始化
  4. 定时任务注册
  5. 服务启动监听

注意事项

  • ⚠️ 自动生成文件: 使用CLI工具生成的文件包含 // Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. 注释,请勿手动修改
  • 🔒 版本兼容性: 建议使用Go 1.24+版本
  • 📦 依赖管理: 使用go mod管理依赖

🔄 更新维护

  • 定期更新: 修复已知问题,添加新功能
  • 性能优化: 持续优化性能表现
  • 安全补丁: 及时修复安全漏洞

📄 许可证

本项目采用 MIT License 许可证。

🤝 贡献指南

欢迎提交Issue和Pull Request来贡献代码

  1. Fork本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启Pull Request

📞 联系方式

🙏 致谢

感谢所有贡献者和开源社区的支持!


utility_go © 2025 - Made with ❤️ by [ayflying]