# go-test **Repository Path**: sgolang/go-test ## Basic Information - **Project Name**: go-test - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-02 - **Last Updated**: 2026-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 消息系统 (Message System) ## 项目介绍 基于 Gin + GORM + WebSocket 的消息管理系统,提供完整的 RESTful API 和实时消息推送功能。 ### 技术栈 | 类别 | 技术 | |------|------| | Web 框架 | Gin | | ORM | GORM | | 数据库 | MySQL | | 缓存 | Redis | | 认证 | JWT | | WebSocket | gorilla/websocket | | 日志 | Zap + Lumberjack | | API 文档 | Swagger | --- ## 项目架构 ``` message-system/ ├── config/ # 配置模块 │ ├── database.go # MySQL 配置 │ ├── redis.go # Redis 配置 │ └── logger.go # 日志配置 ├── model/ # 数据模型 │ ├── admin/ # 系统管理模型 │ │ ├── sys_user.go │ │ ├── sys_role.go │ │ ├── sys_menu.go │ │ └── sys_dept.go │ ├── news.go # 新闻模型 │ └── message.go # 消息模型 ├── repository/ # 数据访问层 │ ├── admin/ │ ├── news.go │ └── message.go ├── service/ # 业务逻辑层 │ ├── admin/ │ ├── news.go │ └── message.go ├── handler/ # 请求处理层 │ ├── admin/ # 管理端接口 │ ├── news.go │ └── message.go ├── middleware/ # 中间件 │ ├── auth.go # JWT 认证 │ └── cors.go # 跨域处理 ├── router/ # 路由配置 ├── hub/ # WebSocket Hub ├── pkg/ # 公共包 │ ├── utils/ # 工具方法 │ │ ├── jwt.go │ │ ├── password.go │ │ ├── page.go │ │ └── json_time.go │ ├── response/ # 统一响应 │ └── redis/ # Redis 工具 ├── main.go # 入口文件 └── go.mod ``` --- ## 核心功能 ### 1. 用户管理 - 用户增删改查 - 用户角色分配 - 部门关联 - 密码加密存储 ### 2. 角色管理 - 角色 CRUD - 角色菜单权限分配 ### 3. 菜单管理 - 树形菜单结构 - 菜单类型:目录(M) / 菜单(C) / 按钮(B) - 页面权限控制 ### 4. 部门管理 - 树形部门结构 - 部门负责人设置 ### 5. 消息管理 - 消息 CRUD - 未读消息统计 - 批量标记已读 ### 6. 新闻管理 - 新闻 CRUD - 分页查询 ### 7. WebSocket 实时推送 - 客户端连接管理 - 消息广播 - 在线状态追踪 --- ## API 接口 ### 认证接口 | 方法 | 路径 | 说明 | |------|------|------| | POST | /api/login | 用户登录 | | POST | /api/change-password | 修改密码 | ### 消息接口 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/messages | 获取消息列表 | | GET | /api/messages/:id | 获取单条消息 | | POST | /api/messages | 创建消息 | | PUT | /api/messages/:id/read | 标记已读 | | PUT | /api/messages/read-all | 全部标记已读 | | GET | /api/messages/unread-count | 未读数量 | ### 新闻接口 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/news | 获取新闻列表 | | GET | /api/news/:id | 获取单条新闻 | | POST | /api/news | 创建新闻 | | PUT | /api/news/:id | 更新新闻 | | DELETE | /api/news/:id | 删除新闻 | ### 管理端接口 (需认证) #### 用户管理 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/admin/users | 用户列表 | | GET | /api/admin/users/:id | 用户详情 | | POST | /api/admin/users | 创建用户 | | PUT | /api/admin/users/:id | 更新用户 | | DELETE | /api/admin/users/:id | 删除用户 | #### 角色管理 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/admin/roles | 角色列表 | | GET | /api/admin/roles/:id | 角色详情 | | POST | /api/admin/roles | 创建角色 | | PUT | /api/admin/roles/:id | 更新角色 | | DELETE | /api/admin/roles/:id | 删除角色 | #### 部门管理 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/admin/depts | 部门列表 | | GET | /api/admin/depts/:id | 部门详情 | | POST | /api/admin/depts | 创建部门 | | PUT | /api/admin/depts/:id | 更新部门 | | DELETE | /api/admin/depts/:id | 删除部门 | #### 菜单管理 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/admin/menus | 菜单列表 | | GET | /api/admin/user-menus | 用户菜单 | ### WebSocket | 说明 | 地址 | |------|------| | WS 连接 | ws://localhost:8080/ws | --- ## 项目运行 ### 环境要求 - Go 1.25+ - MySQL 5.7+ - Redis 6.0+ ### 配置说明 修改 `config/database.go` 中的数据库连接: ```go dsn := "root:123456@tcp(localhost:3306)/message_db?charset=utf8mb4&parseTime=True&loc=Local" ``` 修改 `config/redis.go` 中的 Redis 连接: ```go Addr: "localhost:6379", Password: "", DB: 0, ``` ### 启动步骤 ```bash # 1. 安装依赖 go mod tidy # 2. 启动服务 go run main.go ``` ### 访问地址 | 服务 | 地址 | |------|------| | API | http://localhost:8080 | | Swagger 文档 | http://localhost:8080/swagger/index.html | | WebSocket | ws://localhost:8080/ws | --- ## 项目亮点 ### 1. 分层架构 清晰的 MVC 分层:Handler → Service → Repository → Model,便于维护和扩展。 ### 2. JWT 认证 - Token 有效期 24 小时 - 支持 Token 续期 - 密码加密存储 (bcrypt) ### 3. Redis 缓存 封装了常用 Redis 操作: - String/Hash/List/Set 操作 - 分布式锁支持 (SetNX) - 自动 JSON 序列化 ### 4. 日志系统 - Zap 高性能日志 - Lumberjack 日志轮转 - 同时输出到控制台和文件 - JSON 格式便于日志分析 ### 5. WebSocket - 支持实时消息推送 - 连接池管理 - 消息广播机制 ### 6. 统一响应 标准化 API 响应格式: ```json { "code": 200, "message": "success", "data": {} } ``` ### 7. Swagger 文档 自动生成 API 文档,支持在线测试。 --- ## 数据模型关系 ``` SysUser (用户) ├── SysDept (部门) - 多对一 └── SysRole (角色) - 多对多 SysRole (角色) └── SysMenu (菜单) - 多对多 SysDept (部门) └── SysDept (子部门) - 自关联 Message (消息) └── IsRead 状态 News (新闻) └── 分页查询 ``` --- ## 扩展说明 ### 添加新模块 1. 在 `model/` 添加数据模型 2. 在 `repository/` 添加数据访问层 3. 在 `service/` 添加业务逻辑 4. 在 `handler/` 添加请求处理 5. 在 `router/` 注册路由 6. 运行 `swag init` 更新 Swagger 文档 ### 配置文件外部化 当前配置在代码中,可扩展为: - YAML 配置文件 - 环境变量 - Consul / etcd 配置中心