大项目笔记 | 青训营笔记

76 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第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!")
}