# HoTime 快速上手指南 5 分钟入门 HoTime 框架。 ## 安装 ```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` ## 配置文件 创建 `config/config.json`: ```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 使用三层路由结构:`模块/控制器/方法` ```go appIns.Run(Router{ "模块名": { "控制器名": { "方法名": func(that *Context) { // 处理逻辑 }, }, }, }) ``` ### 获取请求参数 ```go // 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] // 方法 ``` ### 响应数据 ```go // 标准 JSON 响应 that.Display(0, Map{"data": "value"}) // 成功 code=0 that.Display(1, "错误信息") // 失败 code=1 // 直接写入 that.Resp.Write([]byte("raw data")) ``` ## 中间件 ```go // 全局中间件(请求拦截) appIns.SetConnectListener(func(that *Context) bool { // 检查登录状态 if that.Session("user_id").Data == nil { that.Display(2, "请先登录") return true // 返回 true 终止请求 } return false // 返回 false 继续处理 }) ``` ## Session 与缓存 ```go // 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 ```go // 查询列表 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}) ``` ### 链式查询 ```go 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}` | ### 事务 ```go 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 使用说明](HoTimeDB_使用说明.md) ## 扩展功能 | 功能 | 路径 | 说明 | |------|------|------| | 微信支付/公众号/小程序 | `dri/wechat/` | 微信全套 SDK | | 阿里云服务 | `dri/aliyun/` | 企业认证等 | | 腾讯云服务 | `dri/tencent/` | 企业认证等 | | 文件上传 | `dri/upload/` | 文件上传处理 | | 文件下载 | `dri/download/` | 文件下载处理 | | MongoDB | `dri/mongodb/` | MongoDB 驱动 | | RSA 加解密 | `dri/rsa/` | RSA 加解密工具 | ## 完整示例 ```go 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_使用说明.md) - 完整数据库教程 - [HoTimeDB API 参考](HoTimeDB_API参考.md) - API 速查手册