这是我参与「第五届青训营 」笔记创作活动的第5天
今日制作
version 1.0
无任何优化
项目架构:
config为配置文件目录, 表结构在里面
controller :控制器层,只写客户端调用接口回调函数的基本逻辑,核心逻辑实现都在service实现
dao: 为数据库操作的封装,与数据库的底层操作的封装都在里面实现
service层 :业务核心逻辑
数据库:
数据库简介
- 目前表结构只有一级索引,无字段索引
- 自增初始值都为1000,随便取的
users表上用户名上建立了索引, 因为这个用户名查询操作很频繁,但注意不是唯一索引,所以注册用户时记得检查用户名唯一性
实现自己模块过程中如果发现频繁需要某字段作为索引以提升性能,可以修改表结构,并在文档中说明原因
数据库名请取为tiktok,正如dao/initDb.go规定的那样,请修改对应的用户名和密码为自己的
dsn := "root:123456@tcp(127.0.0.1:3306)/tiktok?charset=utf8mb4&parseTime=True&loc=Local"
如以上用户名为 root, 密码为123456, 数据库名为tiktok
CRUD接口说明 : gorm.cn/zh_CN/docs/…
虚拟数据生成
└─ fakeDataGenerator.go
├─ RebuildTable // 重建数据库
├─ FakeUsers // 生成 user 数据
├─ FakeFollows // 生成 follow 数据
├─ FakeVideos // 生成 video 数据
├─ FakeComments // 生成 comment 数据
————————————————
可以在 initDao 里调用 RebuildTable 函数重建数据库
func Init() {
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
logger.Config{
SlowThreshold: time.Second, // 慢 SQL 阈值
LogLevel: logger.Error, // Log level
Colorful: true, // 彩色打印
},
)
var err error
dsn := "root:123456@tcp(127.0.0.1:3306)/tiktok?charset=utf8mb4&parseTime=True&loc=Local"
//想要正确的处理time.Time,需要带上 parseTime 参数,
//要支持完整的UTF-8编码,需要将 charset=utf8 更改为 charset=utf8mb4
Db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
})
if err != nil {
log.Panicln("err:", err.Error())
}
log.Println("mysql has connected!")
// //重建数据库
// RebuildTable()
// log.Println("Rebuld database successfully!")
// 生成虚拟数据
// FakeUsers(10)
// log.Println("fake users generate successfully!")
// FakeFollows(10)
// log.Println("fake follows generate successfully!")
//生成虚拟数据
// FakeUsers(10)
// log.Println("fake users generate successfully!")
// FakeFollows(10)
// log.Println("fake follows generate successfully!")
// FakeVideos(10)
// log.Println("fake videos generate successfully!")
// FakeComments(10)
// log.Println("fake comments generate successfully!")
// FakeLikes(10)
// log.Println("fake likes generate successfully!")
}