工程实践,一个类似知乎的问答系统(服务端)
- 用户注册
- 用户登录
- 查看个人信息
- 查看自己发布的问题、回答以及点赞记录
- 发布问题
- 查看问题
- 修改问题
- 删除问题
- 首页推荐
- 问题热榜
- 回答问题
- 查看回答
- 修改回答
- 删除回答
- 回答列表
- 回答点赞点踩
- Gin: 轻量级Web框架
- GORM: ORM工具,本项目需要配合MySQL使用
- Go-Redis: Golang Redis客户端,用于缓存相关功能
- godotenv: 开发环境下的环境变量工具,方便配置环境变量
- Jwt-Go: Golang JWT组件,本项目使用基于 jwt 实现的 token 来做身份验证
- crypto: Golang 加密算法库,本项目使用其中的 bcrypto 算法来加密用户密码
- cron: Golang 定时任务库,用于 Redis 缓存同步
├── api API控制层,负责处理请求
│ ├── v1 具体API版本
├── cache redis 缓存相关
├── conf 项目的静态配置
├── cron 定时任务
├── middleware 中间件
├── model 数据库模型以及相关操作
├── routes 路由配置
├── serializer 将实体映射成不同的viewmodel,以及常用的响应信息
├── service 将比较复杂的业务从API层分离出来
| main.go 项目入口
git clone https://github.com/Hui4401/qa.git
将项目目录下的 example.env 复制一份,命名为 .env ,修改其中 MySQL,Redis 相关配置,JWT_SECRET_KEY 是用于 jwt 加密的秘钥,设置为一个随机字符串即可
确保 golang 版本在 1.14 及以上并开启了 go module ,执行 go run main.go
便会自动下载依赖并启动项目
如果你安装了 docker,可以很方便的用 docker 部署本项目,见 Dockerfile 和 docker-compose.yml