- 将 BatchInsert 方法重命名为 Inserts,以更好地反映其功能 - 更新示例代码和文档,确保使用新方法名 - 删除过时的文档文件,整合 HoTimeDB 使用说明和 API 参考 - 优化 README.md,增强框架特性和安装说明的清晰度
7.1 KiB
7.1 KiB
HoTime 快速上手指南
5 分钟入门 HoTime 框架。
安装
go get code.hoteas.com/golang/hotime
最小示例
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
配置文件
创建 config/config.json:
{
"port": "8081",
"mode": 2,
"sessionName": "HOTIME",
"tpt": "tpt",
"defFile": ["index.html", "index.htm"],
"db": {
"mysql": {
"host": "localhost",
"port": "3306",
"name": "your_database",
"user": "root",
"password": "your_password"
}
},
"cache": {
"memory": {
"db": true,
"session": true,
"timeout": 7200
}
}
}
| 配置项 | 说明 |
|---|---|
port |
服务端口 |
mode |
0=生产, 1=测试, 2=开发(输出SQL) |
tpt |
静态文件目录 |
db |
数据库配置 |
cache |
缓存配置 |
路由系统
HoTime 使用三层路由结构:模块/控制器/方法
appIns.Run(Router{
"模块名": {
"控制器名": {
"方法名": func(that *Context) {
// 处理逻辑
},
},
},
})
获取请求参数
// GET/POST 参数
name := that.Req.FormValue("name")
// JSON Body
that.Req.ParseForm()
data := that.Req.PostForm
// 获取路径参数
module := that.RouterPath[0] // 模块
controller := that.RouterPath[1] // 控制器
action := that.RouterPath[2] // 方法
响应数据
// 标准 JSON 响应
that.Display(0, Map{"data": "value"}) // 成功 code=0
that.Display(1, "错误信息") // 失败 code=1
// 直接写入
that.Resp.Write([]byte("raw data"))
中间件
// 全局中间件(请求拦截)
appIns.SetConnectListener(func(that *Context) bool {
// 检查登录状态
if that.Session("user_id").Data == nil {
that.Display(2, "请先登录")
return true // 返回 true 终止请求
}
return false // 返回 false 继续处理
})
Session 与缓存
// Session 操作
that.Session("user_id", 123) // 设置
userId := that.Session("user_id") // 获取
that.Session("user_id", nil) // 删除
// 通用缓存
that.Cache("key", "value") // 设置
data := that.Cache("key") // 获取
that.Cache("key", nil) // 删除
三级缓存自动运作:Memory → Redis → Database
数据库操作(简要)
基础 CRUD
// 查询列表
users := that.Db.Select("user", "*", Map{"status": 1})
// 查询单条
user := that.Db.Get("user", "*", Map{"id": 1})
// 插入
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})
链式查询
users := that.Db.Table("user").
LeftJoin("order", "user.id=order.user_id").
Where("status", 1).
And("age[>]", 18).
Order("id DESC").
Page(1, 10).
Select("*")
条件语法速查
| 语法 | 说明 | 示例 |
|---|---|---|
key |
等于 | "id": 1 |
key[>] |
大于 | "age[>]": 18 |
key[<] |
小于 | "age[<]": 60 |
key[>=] |
大于等于 | "age[>=]": 18 |
key[<=] |
小于等于 | "age[<=]": 60 |
key[!] |
不等于 | "status[!]": 0 |
key[~] |
LIKE | "name[~]": "test" |
key[<>] |
BETWEEN | "age[<>]": Slice{18, 60} |
key |
IN | "id": Slice{1, 2, 3} |
事务
success := that.Db.Action(func(tx db.HoTimeDB) bool {
tx.Update("user", Map{"balance[#]": "balance - 100"}, Map{"id": 1})
tx.Insert("order", Map{"user_id": 1, "amount": 100})
return true // 返回 true 提交,false 回滚
})
更多数据库操作:参见 HoTimeDB 使用说明
扩展功能
| 功能 | 路径 | 说明 |
|---|---|---|
| 微信支付/公众号/小程序 | dri/wechat/ |
微信全套 SDK |
| 阿里云服务 | dri/aliyun/ |
企业认证等 |
| 腾讯云服务 | dri/tencent/ |
企业认证等 |
| 文件上传 | dri/upload/ |
文件上传处理 |
| 文件下载 | dri/download/ |
文件下载处理 |
| MongoDB | dri/mongodb/ |
MongoDB 驱动 |
| RSA 加解密 | dri/rsa/ |
RSA 加解密工具 |
完整示例
package main
import (
. "code.hoteas.com/golang/hotime"
. "code.hoteas.com/golang/hotime/common"
)
func main() {
appIns := Init("config/config.json")
// 登录检查中间件
appIns.SetConnectListener(func(that *Context) bool {
// 放行登录接口
if that.RouterPath[2] == "login" {
return false
}
if that.Session("user_id").Data == nil {
that.Display(2, "请先登录")
return true
}
return false
})
appIns.Run(Router{
"api": {
"user": {
"login": func(that *Context) {
phone := that.Req.FormValue("phone")
password := that.Req.FormValue("password")
user := that.Db.Get("user", "*", Map{
"phone": phone,
"password": password,
})
if user == nil {
that.Display(1, "账号或密码错误")
return
}
that.Session("user_id", user.GetInt64("id"))
that.Display(0, Map{"user": user})
},
"info": func(that *Context) {
userId := that.Session("user_id").ToInt64()
user := that.Db.Get("user", "*", Map{"id": userId})
that.Display(0, Map{"user": user})
},
"list": func(that *Context) {
page := that.Req.FormValue("page")
if page == "" {
page = "1"
}
users := that.Db.Table("user").
Where("status", 1).
Order("id DESC").
Page(ObjToInt(page), 10).
Select("id,name,phone,created_at")
total := that.Db.Count("user", Map{"status": 1})
that.Display(0, Map{
"list": users,
"total": total,
})
},
},
},
})
}
下一步:
- HoTimeDB 使用说明 - 完整数据库教程
- HoTimeDB API 参考 - API 速查手册