Todo List 备忘录
此项目使用Gin+Gorm ,基于RESTful API实现的一个备忘录。
1.项目运行
本项目使用Go Mod管理依赖
启动环境
# 运行一次即可
make env-up
下载依赖
go mod tidy
运行
go run ./cmd/main.go
将所有环境关闭并删除
make env-down
2.项目主要功能介绍
- 用户注册登录 ( jwt-go鉴权 )
- 新增/删除/修改/查询 备忘录
- 存储每条备忘录的浏览次数
- 分页功能
3.项目主要依赖:
- Gin
- Gorm
- mysql
- redis
- ini
- jwt-go
- logrus
- go-swagger
4.配置文件
由于mysql和redis都是基于docker安装,所以address是host.docker.internal,访问端口为3000,开发环境为ubuntu时,需要将端口映射到本地,所以需要在PORTS一栏加入3000端口
- config.ini
[service]
AppMode = debug
HttpPort = :3000
# redis:存储备忘录的浏览次数
[redis]
RedisDb = redis
RedisAddr = host.docker.internal:6379
RedisPw =
RedisDbName = 2
# mysql:存储主要数据
[mysql]
Db = mysql
DbHost = host.docker.internal
DbPort = 3307
DbUser = todolist
DbPassWord = todolist
DbName = todolist
5.项目结构
TodoList/
├── api # 用于定义接口函数,也就是controller层
├── cmd # 程序启动
├── conf # 用于存储配置文件
├── consts
├── docs # swagger文档
├── middleware # 应用中间件
├── pkg
│ ├── e # 封装错误码
│ └── util # 工具函数
├── repository # 仓库放置所有存储
│ ├── cache # 放置redis缓存
│ └── db # 持久层MySQL仓库
│ ├── dao # 对db进行操作的dao层
│ └── model # 定义所有持久层数据库表结构的model层
├── routes # 路由逻辑处理
├── service # 接口函数的实现
└── types # 放置所有的定义的结构体
5.1 repository
5.1.1 cache:存放redis缓存
- key.go
const (
RankKey = "rank" // 排行榜的缓存键
)
// 返回 Task点击数的缓存key
func TaskViewKey(id uint) string {
// 缓存key的格式:view:task:{id},id为任务ID转换为字符串后的值
// 例如:view:task:1
return fmt.Sprintf("view:task:%s", strconv.Itoa(int(id)))
}
- common.go
// RedisClient 是redis客户端的实例
var RedisClient *redis.Client
// 初始化redis链接
func Redis() {
// 从配置文件中获取redis的配置
db, _ := strconv.ParseUint(conf.RedisDbName, 10, 64)
// 创建redis客户端
client := redis.NewClient(&redis.Options{
Addr: conf.RedisAddr,
Password: conf.RedisPw,
DB: int(db),
})
// 检测redis是否连接成功
_, err := client.Ping().Result()
if err != nil {
logging.Info(err)
panic(err)
}
RedisClient = client // 赋值给实例
}
5.1.2 db:存放MySQL仓库
- 'dao':对db进行操作的dao层
- 对于每个task、user的增删改查操作,都需要在dao层进行封装
- 数据库连接
- 数据库迁移
- 'model':定义所有持久层数据库表结构的model层
- 对于每个表的结构体,都需要在model层进行定义
- 设置密码、检查密码
5.2 service
5.2.1 user
用户注册和登录
5.2.2 task
新增/删除/修改/查询 备忘录
5.3 pkg
5.3.1
- ctl
- ctl.go:封装了一些公共的函数,例如:返回错误码、返回成功码、返回数据、返回分页数据
- user_info.go:从上下文中获取用户信息
6.在docker-desktop里查看数据库
- 查看mysql
- 查看redis