2026-01-22 04:36:52 +08:00
|
|
|
|
# HoTime
|
2021-04-30 00:27:12 +08:00
|
|
|
|
|
2026-01-22 04:36:52 +08:00
|
|
|
|
**高性能 Go Web 服务框架**
|
|
|
|
|
|
|
|
|
|
|
|
## 特性
|
|
|
|
|
|
|
|
|
|
|
|
- **高性能** - 单机 10万+ QPS,支持百万级并发用户
|
|
|
|
|
|
- **多数据库支持** - MySQL、SQLite3,支持主从分离
|
|
|
|
|
|
- **三级缓存系统** - Memory > Redis > DB,自动穿透与回填
|
|
|
|
|
|
- **Session管理** - 内置会话管理,支持多种存储后端
|
|
|
|
|
|
- **自动代码生成** - 根据数据库表自动生成 CRUD 接口
|
|
|
|
|
|
- **丰富工具类** - 上下文管理、类型转换、加密解密等
|
|
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
### 安装
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
go get code.hoteas.com/golang/hotime
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 最小示例
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
. "code.hoteas.com/golang/hotime"
|
|
|
|
|
|
. "code.hoteas.com/golang/hotime/common"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
appIns := Init("config/config.json")
|
|
|
|
|
|
|
|
|
|
|
|
appIns.Run(Router{
|
|
|
|
|
|
"app": {
|
|
|
|
|
|
"test": {
|
|
|
|
|
|
"hello": func(that *Context) {
|
|
|
|
|
|
that.Display(0, Map{"message": "Hello World"})
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
访问: http://localhost:8081/app/test/hello
|
|
|
|
|
|
|
|
|
|
|
|
## 性能测试报告
|
|
|
|
|
|
|
|
|
|
|
|
### 测试环境
|
|
|
|
|
|
|
|
|
|
|
|
| 项目 | 配置 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| CPU | 24 核心 |
|
|
|
|
|
|
| 系统 | Windows 10 |
|
|
|
|
|
|
| Go 版本 | 1.19.3 |
|
|
|
|
|
|
|
|
|
|
|
|
### 测试结果
|
|
|
|
|
|
|
|
|
|
|
|
| 并发数 | QPS | 成功率 | 平均延迟 | P99延迟 |
|
|
|
|
|
|
|--------|-----|--------|----------|---------|
|
|
|
|
|
|
| 500 | 99,960 | 100% | 5.0ms | 25.2ms |
|
|
|
|
|
|
| **1000** | **102,489** | **100%** | **9.7ms** | **56.8ms** |
|
|
|
|
|
|
| 2000 | 75,801 | 99.99% | 26.2ms | 127.7ms |
|
|
|
|
|
|
| 5000 | 12,611 | 99.95% | 391.4ms | 781.4ms |
|
|
|
|
|
|
|
|
|
|
|
|
### 性能总结
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
最高 QPS: 102,489 请求/秒
|
|
|
|
|
|
最佳并发数: 1,000
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 并发用户估算
|
|
|
|
|
|
|
|
|
|
|
|
| 使用场景 | 请求频率 | 可支持用户数 |
|
|
|
|
|
|
|----------|----------|--------------|
|
|
|
|
|
|
| 高频交互 | 1次/秒 | ~10万 |
|
|
|
|
|
|
| 活跃用户 | 1次/5秒 | ~50万 |
|
|
|
|
|
|
| 普通浏览 | 1次/10秒 | ~100万 |
|
|
|
|
|
|
| 低频访问 | 1次/30秒 | ~300万 |
|
|
|
|
|
|
|
|
|
|
|
|
**生产环境建议**: 保留 30-50% 性能余量,安全并发用户数约 **50万 - 70万**
|
|
|
|
|
|
|
|
|
|
|
|
### 与主流框架性能对比
|
|
|
|
|
|
|
|
|
|
|
|
| 框架 | 典型QPS | 基础实现 | 性能评级 |
|
|
|
|
|
|
|------|---------|----------|----------|
|
|
|
|
|
|
| **HoTime** | **~100K** | net/http | 第一梯队 |
|
|
|
|
|
|
| Fiber | ~100K+ | fasthttp | 第一梯队 |
|
|
|
|
|
|
| Gin | ~60-80K | net/http | 第二梯队 |
|
|
|
|
|
|
| Echo | ~60-80K | net/http | 第二梯队 |
|
|
|
|
|
|
| Chi | ~50-60K | net/http | 第二梯队 |
|
|
|
|
|
|
|
|
|
|
|
|
## 框架对比
|
|
|
|
|
|
|
|
|
|
|
|
### 功能特性对比
|
|
|
|
|
|
|
|
|
|
|
|
| 特性 | HoTime | Gin | Echo | Fiber |
|
|
|
|
|
|
|------|--------|-----|------|-------|
|
|
|
|
|
|
| 性能 | 100K QPS | 70K QPS | 70K QPS | 100K QPS |
|
|
|
|
|
|
| 内置ORM | ✅ | ❌ | ❌ | ❌ |
|
|
|
|
|
|
| 内置缓存 | ✅ 三级缓存 | ❌ | ❌ | ❌ |
|
|
|
|
|
|
| Session | ✅ 内置 | ❌ 需插件 | ❌ 需插件 | ❌ 需插件 |
|
|
|
|
|
|
| 代码生成 | ✅ | ❌ | ❌ | ❌ |
|
|
|
|
|
|
| 微信/支付集成 | ✅ 内置 | ❌ | ❌ | ❌ |
|
|
|
|
|
|
| 路由灵活性 | 中等 | 优秀 | 优秀 | 优秀 |
|
|
|
|
|
|
| 社区生态 | 较小 | 庞大 | 较大 | 较大 |
|
|
|
|
|
|
|
|
|
|
|
|
### HoTime 优势
|
|
|
|
|
|
|
|
|
|
|
|
1. **开箱即用** - 内置 ORM + 缓存 + Session,无需额外集成
|
|
|
|
|
|
2. **三级缓存** - Memory > Redis > DB,自动穿透与回填
|
|
|
|
|
|
3. **开发效率高** - 链式查询语法简洁,内置微信/云服务SDK
|
|
|
|
|
|
4. **性能优异** - 100K QPS,媲美最快的 Fiber 框架
|
|
|
|
|
|
|
|
|
|
|
|
### 适用场景
|
|
|
|
|
|
|
|
|
|
|
|
| 场景 | 推荐度 | 说明 |
|
|
|
|
|
|
|------|--------|------|
|
|
|
|
|
|
| 中小型后台系统 | ⭐⭐⭐⭐⭐ | 完美适配,开发效率最高 |
|
|
|
|
|
|
| 微信小程序后端 | ⭐⭐⭐⭐⭐ | 内置微信SDK |
|
|
|
|
|
|
| 快速原型开发 | ⭐⭐⭐⭐⭐ | 代码生成 + 全功能集成 |
|
|
|
|
|
|
| 高并发API服务 | ⭐⭐⭐⭐ | 性能足够 |
|
|
|
|
|
|
| 大型微服务 | ⭐⭐⭐ | 建议用Gin/Echo |
|
|
|
|
|
|
|
|
|
|
|
|
### 总体评价
|
|
|
|
|
|
|
|
|
|
|
|
| 维度 | 评分 | 说明 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| 性能 | 95分 | 第一梯队,媲美Fiber |
|
|
|
|
|
|
| 功能集成 | 90分 | 远超主流框架 |
|
|
|
|
|
|
| 开发效率 | 85分 | 适合快速开发 |
|
|
|
|
|
|
| 生态/社区 | 50分 | 持续建设中 |
|
|
|
|
|
|
|
|
|
|
|
|
> **总结**: HoTime 是"小而全"的高性能框架,性能不输主流,集成度远超主流,适合独立开发者或小团队快速构建中小型项目。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 数据库操作
|
|
|
|
|
|
|
|
|
|
|
|
### 基础 CRUD
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
// 查询单条
|
|
|
|
|
|
user := that.Db.Get("user", "*", Map{"id": 1})
|
|
|
|
|
|
|
|
|
|
|
|
// 查询列表
|
|
|
|
|
|
users := that.Db.Select("user", "*", Map{"status": 1, "ORDER": "id DESC"})
|
|
|
|
|
|
|
|
|
|
|
|
// 插入数据
|
|
|
|
|
|
id := that.Db.Insert("user", Map{"name": "test", "age": 18})
|
|
|
|
|
|
|
|
|
|
|
|
// 更新数据
|
|
|
|
|
|
rows := that.Db.Update("user", Map{"name": "new"}, Map{"id": 1})
|
|
|
|
|
|
|
|
|
|
|
|
// 删除数据
|
|
|
|
|
|
rows := that.Db.Delete("user", Map{"id": 1})
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 链式查询
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
users := that.Db.Table("user").
|
|
|
|
|
|
LeftJoin("order", "user.id=order.user_id").
|
|
|
|
|
|
And("status", 1).
|
|
|
|
|
|
Order("id DESC").
|
|
|
|
|
|
Page(1, 10).
|
|
|
|
|
|
Select("*")
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 条件语法
|
|
|
|
|
|
|
|
|
|
|
|
| 语法 | 说明 | 示例 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| key | 等于 | "id": 1 |
|
|
|
|
|
|
| key[>] | 大于 | "age[>]": 18 |
|
|
|
|
|
|
| key[<] | 小于 | "age[<]": 60 |
|
|
|
|
|
|
| key[!] | 不等于 | "status[!]": 0 |
|
|
|
|
|
|
| key[~] | LIKE | "name[~]": "test" |
|
|
|
|
|
|
| key[<>] | BETWEEN | "age[<>]": Slice{18, 60} |
|
|
|
|
|
|
|
|
|
|
|
|
## 缓存系统
|
|
|
|
|
|
|
|
|
|
|
|
三级缓存: **Memory > Redis > Database**
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
// 通用缓存
|
|
|
|
|
|
that.Cache("key", value) // 设置
|
|
|
|
|
|
data := that.Cache("key") // 获取
|
|
|
|
|
|
that.Cache("key", nil) // 删除
|
|
|
|
|
|
|
|
|
|
|
|
// Session 缓存
|
|
|
|
|
|
that.Session("user_id", 123) // 设置
|
|
|
|
|
|
userId := that.Session("user_id") // 获取
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 中间件
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
appIns.SetConnectListener(func(that *Context) bool {
|
|
|
|
|
|
if that.Session("user_id").Data == nil {
|
|
|
|
|
|
that.Display(2, "请先登录")
|
|
|
|
|
|
return true // 终止请求
|
|
|
|
|
|
}
|
|
|
|
|
|
return false // 继续处理
|
|
|
|
|
|
})
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 扩展功能
|
|
|
|
|
|
|
|
|
|
|
|
- **微信支付/公众号/小程序** - dri/wechat/
|
|
|
|
|
|
- **阿里云服务** - dri/aliyun/
|
|
|
|
|
|
- **腾讯云服务** - dri/tencent/
|
|
|
|
|
|
- **文件上传下载** - dri/upload/, dri/download/
|
|
|
|
|
|
- **MongoDB** - dri/mongodb/
|
|
|
|
|
|
- **RSA加解密** - dri/rsa/
|
|
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
|
|
MIT License
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**HoTime** - 让 Go Web 开发更简单、更高效
|