本文将介绍如何使用Gin web框架和Gorm对象关系映射框架来构建一个简单的Todo-List应用程序。我们将使用MySQL数据库,并实现基本的增删改查(CRUD)功能。这是一个极简风格的项目,使用Go语言实现。
执行
go mod init "todo-list"
项目目录结构
-| models/
---| models.go
---| todo.go
-| routes/
---| todo.go
-| main.go
-| README.md
models/models.go
package models
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
func InitDB() *gorm.DB {
configuration := "root:password@tcp(localhost:3306)/todo_list?charset=utf8&parseTime=True"
db, err := gorm.Open("mysql", configuration)
if err != nil {
fmt.Println(err)
}
DB = db
if err = DB.AutoMigrate(&Todo{}); err != nil {
panic(err)
}
return DB
}
models/todo.go
package models
type Todo struct {
ID uint `gorm:"primary_key" json:"id"`
Title string `json:"title"`
}
routes/todo.go
package routes
import (
"github.com/gin-gonic/gin"
"net/http"
"todo-list/models"
)
func SetTodoRoutes(r *gin.Engine) {
r.GET("/api/todos", func(c *gin.Context) {
var todos []models.Todo
models.DB.Find(&todos)
c.JSON(http.StatusOK, todos)
})
r.POST("/api/todos", func(c *gin.Context) {
var todo models.Todo
c.Bind(&todo)
models.DB.Create(&todo)
c.JSON(http.StatusOK, gin.H{"success": todo})
})
r.PUT("/api/todos/:id", func(c *gin.Context) {
id := c.Params.ByName("id")
var todo models.Todo
models.DB.First(&todo, id)
c.Bind(&todo)
models.DB.Save(&todo)
c.JSON(http.StatusOK, gin.H{"success": todo})
})
r.DELETE("/api/todos/:id", func(c *gin.Context) {
id := c.Params.ByName("id")
var todo models.Todo
models.DB.First(&todo, id)
models.DB.Delete(&todo)
c.Status(http.StatusOK)
})
}
main.go
Copy code
package main
import (
"github.com/gin-gonic/gin"
"todo-list/models"
"todo-list/routes"
)
func main() {
db := models.InitDB()
defer func() {
dbClose, err := db.DB()
if err != nil {
panic(err)
}
dbClose.Close()
}()
r := gin.Default()
routes.SetTodoRoutes(r)
r.Run(":8080")
}
操作说明
首先,需要在MySQL中创建一个名为todo_list的数据库。
现在,我们可以运行应用程序并访问http://localhost:8080/api/todos来查看空的todo列表。
为了添加一个新的Todo项,请通过POST请求将title作为JSON参数提交给http://localhost:8080/api/todos。
要更新现有的Todo项,请使用PUT请求并将要更新的Todo的ID和新值作为JSON参数提交给http://localhost:8080/api/todos/:id。请注意,:id应替换为要更新的Todo项的实际ID。
要删除现有的Todo项,请使用DELETE请求并将要删除的Todo的ID作为URL参数提交至http://localhost:8080/api/todos/:id。同样,请注意要将:id替换为要删除的Todo项的实际ID。