gin框架结合redis实现Todo-List CRUD

345 阅读2分钟

在本篇文章中,我们将学习如何使用golang中的gin框架结合redis来实现一个Todo-List应用程序,具有CRUD(Create, Read, Update, Delete)功能。

环境配置

在开发这个Todo-List应用程序之前,我们需要安装Golang和Redis。你可以从官方网站上下载并安装Golang和Redis。在安装完成后,查找Redis的默认端口号(默认端口号为6379)并启动Redis。

构建gin应用程序

接下来,我们将创建使用gin框架的应用程序。

首先,在命令行中输入以下命令创建一个新的gin应用程序:

go mod init <project_name>

然后我们需要安装gin和redigo的依赖包,输入以下命令:

go get github.com/gin-gonic/gin
go get github.com/gomodule/redigo/redis

然后,我们可以在我们的项目中创建一个名为main.go的新的Go源代码文件,如下所示:

package main

import (
   "encoding/json"
   "fmt"
   "log"

   "github.com/gin-gonic/gin"
   "github.com/gomodule/redigo/redis"
)

type Todo struct {
   Title string `json:"title"`
}

func main() {
   //连接redis服务器
   conn, err := redis.Dial("tcp", ":6379")
   if err != nil {
      log.Fatal(err)
   }
   defer conn.Close()

   //创建gin实例
   r := gin.Default()

   //路由
   r.GET("/todo/:id", func(c *gin.Context) {
      id := c.Param("id")
      todo, err := redis.String(conn.Do("GET", id))
      if err != nil {
         c.JSON(500, gin.H{"error": err.Error()})
         return
      }

      var todoObj Todo
      json.Unmarshal([]byte(todo), &todoObj)

      c.JSON(200, gin.H{"todo": todoObj})
   })

   r.PUT("/todo/:id", func(c *gin.Context) {
      id := c.Param("id")

      var todo Todo

      c.Bind(&todo)

      marshal, _ := json.Marshal(todo)

      _, err := conn.Do("SET", id, string(marshal))
      if err != nil {
         c.JSON(500, gin.H{"error": err.Error()})
         return
      }
      c.JSON(200, gin.H{"message": "success"})
   })

   r.DELETE("/todo/:id", func(c *gin.Context) {
      id := c.Param("id")
      _, err := conn.Do("DEL", id)
      if err != nil {
         c.JSON(500, gin.H{"error": err.Error()})
         return
      }
      c.JSON(200, gin.H{"message": "success"})
   })

   r.Run(":8080")
   fmt.Println("Todo-List application running on http://localhost:8080")
}

这段代码通过gin框架创建了一个具有三个不同路由的HTTP服务器。在这三个路由中,我们可以创建、查询和删除Todo列表项目。

  • GET "/todo/:id":根据指定的id参数,获取Redis中存储的相应Todo
  • PUT "/todo/:id":创建一个新的Todo项,并将其保存到Redis数据库中
  • DELETE "/todo/:id":删除指定id的Todo项