用 Go 和 Redis 构建一个简单的任务管理系统

news2024/9/30 13:15:37

用 Go 和 Redis 构建一个简单的任务管理系统

在这篇博客中,我们将使用 Go 语言结合 Gin 框架和 Redis,一步步创建一个简单的任务管理系统。本系统可用于执行关键的 CRUD(创建、读取、更新、删除)操作,我们特别关注如何通过 Redis 作为数据存储实现这些功能。

介绍

任务管理系统的特点在于能够让用户轻松地创建、查看和删除任务。现代的应用程序需要快速的数据写入和读取,而 Redis 提供了这样的能力,因此非常适合我们的需求。

项目初始化

1. 创建项目目录并初始化 Go 模块

首先,开始创建项目目录,并在我们的新目录中初始化 Go 模块:

mkdir task-manager
cd task-manager
go mod init task-manager

此操作将创建一个 go.mod 文件,用于管理我们的项目依赖。

安装依赖项

下面我们来安装必要的依赖库——Gin 用于处理 HTTP 请求,Go-Redis 用于连接和操作 Redis:

go get -u github.com/gin-gonic/gin
go get -u github.com/go-redis/redis/v8

这些库将为我们后续的开发提供强大的功能支持。

配置 Redis 连接

在项目根目录下创建 main.go 文件,用于初始化 Redis 连接和启动服务器:

package main

import (
    "task-manager/controllers"
    "github.com/gin-gonic/gin"
    "github.com/go-redis/redis/v8"
)

var rdb *redis.Client

func initRedis() {
    rdb = redis.NewClient(&redis.Options{
        Addr: "localhost:6379", // 设置 Redis 地址
    })
}

func main() {
    initRedis()

    r := gin.Default()

    // 设置路由
    r.POST("/tasks", controllers.CreateTask)
    r.GET("/tasks", controllers.GetTasks)
    r.DELETE("/tasks/:id", controllers.DeleteTask)

    r.Run(":8080")
}

代码解释

Redis 客户端初始化:我们使用 go-redis 客户端连接到本地 Redis 服务器。
Gin 路由设置:通过 Gin,我们将不同的 HTTP 路径绑定到相应的处理函数。

实现控制器逻辑

在项目的根目录下创建一个 controllers 目录,并创建 task.go 文件:

package controllers

import (
    "context"
    "net/http"
    "task-manager/models"
    "github.com/gin-gonic/gin"
    "strconv"
)

var ctx = context.Background()

func CreateTask(c *gin.Context) {
    var task models.Task
    if err := c.ShouldBindJSON(&task); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    task.ID = models.GenerateID()
    models.Rdb.Set(ctx, strconv.Itoa(task.ID), task.Title, 0)

    c.JSON(http.StatusOK, gin.H{"message": "Task created successfully", "id": task.ID})
}

func GetTasks(c *gin.Context) {
    keys, _ := models.Rdb.Keys(ctx, "*").Result()

    var tasks []models.Task
    for _, key := range keys {
        title, _ := models.Rdb.Get(ctx, key).Result()
        id, _ := strconv.Atoi(key)
        tasks = append(tasks, models.Task{ID: id, Title: title})
    }

    c.JSON(http.StatusOK, tasks)
}

func DeleteTask(c *gin.Context) {
    id := c.Param("id")
    models.Rdb.Del(ctx, id)

    c.JSON(http.StatusOK, gin.H{"message": "Task deleted successfully"})
}

代码解释

创建任务: 从请求中绑定任务数据后,在 Redis 中以键值对的形式存储。
获取所有任务: 遍历 Redis 中的所有键,获取并返回所有任务。
删除任务: 根据任务 ID 在 Redis 中删除相应的记录。

定义任务模型

models 目录下创建 task.go 文件来定义任务的数据模型:

package models

import (
    "github.com/go-redis/redis/v8"
)

type Task struct {
    ID    int    `json:"id"`
    Title string `json:"title" binding:"required"`
}

var Rdb *redis.Client

func SetRedisClient(client *redis.Client) {
    Rdb = client
}

func GenerateID() int {
    return int(Rdb.Incr(ctx, "task_id_counter").Val())
}

代码解释

Task 结构体:定义了任务的基本信息,包括 ID 和标题。
ID 生成: 使用 Redis 的自增功能自动为每个任务生成唯一 ID。

使用 Postman 进行测试

1. 创建任务 (POST /tasks)

步骤:

1.打开 Postman,创建一个新的请求。
2.设置请求方法为 POST,请求 URL 为 http://localhost:8080/tasks
3.在请求的 Body 部分,选择 rawJSON 格式。
4.输入任务数据,例如:

{
  "title": "Buy groceries"
}

点击 Send

期望响应:
服务器返回 200 OK,并带有任务创建成功的消息和新任务的 ID:

{
  "message": "Task created successfully",
  "id": 1
}

2. 获取任务列表 (GET /tasks)

步骤

1.在 Postman 中创建一个新的请求。
2.设置请求方法为 GET,请求 URL 为 http://localhost:8080/tasks
3.点击 Send

期望响应

服务器返回 200 OK,并返回所有任务的列表:

[
  {
    "id": 1,
    "title": "Buy groceries"
  }
  // 可以有更多任务
]

3. 删除任务 (DELETE /tasks/:id)

步骤:
1.在 Postman 中创建一个新的请求。
2.设置请求方法为 DELETE,将请求 URL 设置为 http://localhost:8080/tasks/1,其中 1 替换为您想要删除的任务的 ID。
3.点击 Send.

期望响应:
服务器返回 200 OK,并带有任务删除成功的消息:

{
  "message": "Task deleted successfully"
}

其他注意事项

数据格式:确保在发送请求时,Body 的 JSON 格式数据正确,避免请求因格式问题而失败。
错误处理:测试用例应包括错误处理,例如尝试获取或删除不存在的任务以查看系统的错误响应。
Redis 可视化工具:可以使用 Redis 可视化工具(如 RedisInsight)查看任务在 Redis 中的存储情况。

通过这些步骤,您可以用 Postman 充分验证任务管理系统的功能,并确保系统正确地处理数据。您还可以进一步扩展功能,例如添加更新任务的能力或用户身份验证机制,加强系统的实用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2179709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这 5 个自动化运维场景,可能用 Python 更香?

许多运维工程师会使用 Python 脚本来自动化运维任务。Python 是一种流行的编程语言,具有丰富的第三方库和强大的自动化能力,适用于许多不同的领域。 这里插播一条粉丝福利,如果你正在学习Python或者有计划学习Python,想要突破自我…

需求6:如何写一个后端接口?

这两天一直在对之前做的工作做梳理总结,不过前两天我都是在总结一些bug的问题。尽管有些bug问题我还没写文章,但是,我今天不得不先停下对bug的总结了。因为在国庆之后,我需要自己开发一个IT资产管理的功能,这个功能需要…

IDEA:Properties in parent definition are prohibited

问题背景 如果你在POM.xml中使用了自定义版本,那么IDEA就没办法很动态检测(其实可以做到的,不是吗),就会有一个Properties in parent definition are prohibited 的错误信息(禁止使用父级定义中的属性&…

2024 八九月份国内外CTF 散装re 部分wp

CTFZone silentDRM 附件拖入ida 最后部分很明显是比较。mmap和munmap函数的块大小为0x23280,比较大,暂时不管它。下断点动调,跳过v6和v7的分析部分,因为它是根据每五个字节的第一个字节生成的。直接看call v7 做运算后分为…

【博弈强化学习】——UAV-BS 的联合功率分配和 3D 部署:基于博弈论的深度强化学习方法

【论文】:Joint Power Allocation and 3D Deployment for UAV-BSs: A Game Theory Based Deep Reinforcement Learning Approach 【引用】:Fu S, Feng X, Sultana A, et al. Joint power allocation and 3D deployment for UAV-BSs: A game theory based…

基于Node.js+Express+MySQL+VUE科研成果网站发布查看科研信息科研成果论文下载免费安装部署

目录 1.技术选型‌ ‌2.功能设计‌ ‌3.系统架构‌ ‌4.开发流程‌ 5.开发背景 6.开发目标 7.技术可行性 8.功能可行性 8.1功能图 8.2 界面设计 8.3 部分代码 构建一个基于Spring Boot、Java Web、J2EE、MySQL数据库以及Vue前后端分离的科研成果网站,可…

PACS系统的延伸:三维重建后处理

影像中心PACS系统源代码,C#语言三发的PACS源码,三甲以下医院都能满足。 PACS系统即医学影像存档与通信系统,是医疗领域中不可或缺的信息技术系统。它主要负责医院内医学影像的数字化存储、管理、传输和显示,极大地促进了医疗影像信…

在线PDF怎么转换成JPG图片?分享14种转换操作!

作为一名社畜,俺也经常要将PDF转换为图片格式! 如何进行快速转换,包括电脑端、在线端和手机端,今天俺就测评了50款工具,给你得出了下面这些渠道,不少也是免费的,相信对你有帮助哦! …

springboot基于Vue的电影在线预定与管理系统

目录 毕设制作流程功能和技术介绍系统实现截图开发核心技术介绍:使用说明开发步骤编译运行代码执行流程核心代码部分展示可行性分析软件测试详细视频演示源码获取 毕设制作流程 (1)与指导老师确定系统主要功能; (2&am…

VS Code调整字体大小

##在工程目录底下.vscode/settings.json添加设置参数 {"editor.fontSize": 15,"window.zoomLevel": 1.5 }

Coursera_ Algorithms I 学习笔记:Module_3_Analysis_of_Algorithm_Introduction

Coursera_ Algorithms I 学习笔记:Module_3_Analysis_of_Algorithm_Introduction scientific method applied to analysis of algorithms data analysis log-log plot doubling hypothesis experimental alogrithmics System independent effectsSystem dependen…

【CSS in Depth 2 精译_040】6.3 CSS 定位技术之:相对定位(下)—— 用纯 CSS 绘制一个三角形

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结)第二章 相对单位(已完结)第三章 文档流与盒模型(已完结)第四章 Flexbox 布局(已…

Clocking System

文章目录 1. 介绍2. 时钟源2.1 scillator Circuit (OSC)2.1.1 外部时钟输入模式2.1.2 外部晶体/陶瓷谐振器模式2.1.3 振荡器的配置2.1.4 Oscillator Watchdog 2.2 Back-up Clock 3. 锁相环(PLL)3.1 系统锁相环3.1.1 Features3.1.2 框图 3.2.外设锁相环3.…

JAVA云洋系统聚合快递打造一站式快递系统小程序源码

云洋系统聚合快递 —— 打造一站式快递管理新体验 🚀 一站式快递管理新时代 在快节奏的现代生活中,快递已经成为我们日常不可或缺的一部分。然而,面对众多快递公司和复杂的物流信息,如何高效管理快递成为了许多人的难题。幸运的是…

基于SpringBoot大学生就业管理系统设计与实现

1.1 研究背景 科学技术日新月异的如今,计算机在生活各个领域都占有重要的作用,尤其在信息管理方面,在这样的大背景下,学习计算机知识不仅仅是为了掌握一种技能,更重要的是能够让它真正地使用到实践中去,以…

从“抄袭”到“原创”:5个超实用的论文降重技巧!

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 每当写完一篇论文,松了一口气准备庆祝时,突然想到还有一个名叫“查重”的终极大Boss等着你,瞬间心情从云端跌入谷底。 是不是你? 很多同学在提交之前&#…

CDGA|利用人工智能与边缘计算显著提升数据治理效率与效果的实践案例

在当今数字化转型的浪潮中,数据已成为企业最宝贵的资产之一。然而,随着数据量的爆炸性增长,如何高效、安全地治理这些数据成为企业面临的重要挑战。人工智能(AI)与边缘计算技术的融合,为数据治理带来了前所…

《程序猿之Redis缓存实战 · 哈希类型》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

《ToDesk 云电脑、易腾云、青椒云移动端体验实测:让手机秒变超级电脑》

前言 科技发展到如今2024年,可以说每一年都在发生翻天覆地的变化。云电脑这个市场近年来迅速发展,无需购买和维护额外的硬件就可以体验到电脑端顶配的性能和体验,并且移动端也可以带来非凡体验。我们在外出办公随身没有携带电脑情况下&#x…

聊一聊大模型六小虎生存现状!

ChatGPT横空出世,打响了生成式AI创业热潮的发令枪。 在国内,智谱AI、百川智能、零一万物、月之暗面、Minimax率先领跑。今年6月,前微软全球副总裁姜大昕创办的阶跃星辰,开始受到资本的青睐,一轮20亿美元的融资&#x…