前言
本文通过一步一步的设计,最终实现一个完善的todo应用。
我们使用GO框架Gin用户路由控制和返回数据。使用Gorm用于操作数据库。
读者可根据本教程操作,最终实现列出的各项功能。
技术清单
本文中所涉及的技术内容主要有以下几种:Gin:轻量高效性能爆棚的WEB框架
Gorm:一个关系型数据库的ORM工具包,避免直接SQL语句操作
MySQL:数据库
curl工具,用于API接口数据测试
另外,使用的GO版本是go version go1.13.5 windows/amd64
对于第2,3条内容,可使用以下指令安装
对于工具curl,我们使用的是 git bash内自带的指令。如果是linux下用户,开箱即用。
创建数据库
本文使用MySQL数据库装载数据。本节我们仅需创建一个空的数据库,就可以了。表结构在下一节使用gorm迁移功能创建。
使用Navicat工具新建界面如下图。
需要特别留意数据库字符集编码使用 utf8mb4,这个是MySQL真正的utf8,用于中文字符支持。
创建表模型
gorm中的Automigrate()操作,用于刷新数据库中的表,使其保持最新。即让数据库之前存储的记录的表字段和程序中最新使用的表字段保持一致(只增不减)。
我们先建一个todos表模型。
type (
todoModel struct {
gorm.Model
Title string `json:"title"`
Completed int `json:"completed`
}
fmtTodo struct {
ID uint `json:"id"`
Title string `json:"title"`
Completed bool `json:"completed"`
}
)
其中 todoModel用于数据库todos表。我们默认继承使用了gorm.Model的字段,主要包括以下几个:
// gorm.Model 定义
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}
数据库表会自动生成上述4个字段,并追加 title,completed两个字段。模型名与表名不一致,我们手动指定表名:
// 指定表名
func (todoModel) TableName() string {
return "todos"
}
然后在代码初始化过程中执行迁移。
var db *gorm.DB
// 初始化
func init() {
var err error
var constr string
constr = fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", "root", "111213", "localhost", 3306, "05-gin-gorm-todo")
db, err = gorm.Open("mysql", constr)
if err != nil {
panic("数据库连接失败")
}
db.AutoMigrate(&todoModel{})