业务思路

1 先设计数据库结构

2 前后端进行 api 接口的规定,进行交互

3model 里存 User.go 数据库 User 的表的定义,增加,删除用户的操作

与 api v1 里(v 几是有几代版本)的 addUser 交互(AddUser 调用 User) 的函数

4route 里 router.go 进行路由的设置

5config 进行配置的设置,不用去改源码

6utils 放一些全局的组件,公共的内容

7main.go 主函数

1
2
3
4
5
6
7
8
9
type User struct {
gorm.Model
Username string `gorm:"type:varchar(20);not null" json:"username"`
Password string `gorm:"type:varchar(20);not null" json:"password"`
Role int `gorm:"type:int" json:"role"` // 0为管理员,1为普通用户
}
//里面的not null代表前后端对接时,如果传进来的User的某个属性为空,是否可以在表里创建数据,
//所以我们这里not null代表,必须不为空才能创建,而有关用户创建必须不为空,我们可以只在前端实现,
//跳出提示框,后端默认不处理数据库即可

golong 直接在函数里调用 scpypassword 和 chekcusername 这些函数的可读性比 BeforeSave 的可读性要高,同时 golong 性能好,所以时间区别不是很大

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
逻辑外键(Cid):在你的Article结构体中,Cid字段作为逻辑外键,指向Category表的某个记录的主键。
预加载(Preload):通过预加载Category,GORM会自动查询每篇文章对应的分类信息,并将其填充到Article结构体的Category字段中。
分页查询:代码中的Limit和Offset方法用于实现分页功能,确保每次只查询和返回指定数量的文章记录。
总的来说,虽然你的代码中没有直接操作物理外键,但通过GORM的foreignkey标签和Preload方法,它实现了类似外键的数据关联和完整性保护的逻辑。
*/
type Article struct {
Category Category `gorm:"foreignkey:Cid"`
gorm.Model
Title string `gorm:"type:varchar(100);not null" json:"title"`

Cid int `gorm:"type:int;not null" json:"cid"`
Desc string `gorm:"type:varchar(200);not null" json:"desc"`
Content string `gorm:"type:longtext;not null" json:"content"`
Img string `gorm:"type:varchar(100);not null" json:"img"`
}