15分钟学 Go 第 49 天 :复杂项目开发

第49天:复杂项目开发

欢迎来到第49天的Go语言学习!今天,我们将深入探讨如何开始一个中型项目。这将包括项目的设计、架构、代码实现和运行。我们将以开发一个简单的任务管理系统为例。

1. 项目概述

我们的目标是构建一个基本的任务管理系统,具有如下功能:

  • 用户可以添加任务。
  • 用户可以查看任务列表。
  • 用户可以删除任务。

项目需求

功能 描述
添加任务 用户可以输入任务描述来添加新任务
查看任务 显示所有当前任务的列表,带有任务ID和描述
删除任务 根据任务ID删除指定任务

技术栈

  • 语言:Go
  • Web框架:Gin
  • 数据存储:内存(可以扩展为使用数据库)
  • 开发工具:Visual Studio Code, Go Modules

2. 项目结构

项目的目录结构可以如下所示:

复制代码
task-manager/
├── main.go
├── go.mod
├── handler/
│   ├── task.go
└── model/
    ├── task.go

3. 创建项目

3.1 初始化项目

在终端中运行以下命令,初始化Go模块:

bash 复制代码
mkdir task-manager
cd task-manager
go mod init task-manager

3.2 安装Gin框架

使用Go的包管理工具安装Gin:

bash 复制代码
go get -u github.com/gin-gonic/gin

4. 编写代码

4.1 创建模型

首先,我们在model/task.go中定义任务模型及对应的操作。

go 复制代码
// model/task.go
package model

type Task struct {
    ID          int    `json:"id"`
    Description string `json:"description"`
}

var tasks = []Task{}
var nextID = 1

// AddTask 添加任务
func AddTask(description string) Task {
    task := Task{ID: nextID, Description: description}
    tasks = append(tasks, task)
    nextID++
    return task
}

// GetTasks 获取所有任务
func GetTasks() []Task {
    return tasks
}

// DeleteTask 删除任务
func DeleteTask(id int) bool {
    for i, task := range tasks {
        if task.ID == id {
            tasks = append(tasks[:i], tasks[i+1:]...)
            return true
        }
    }
    return false
}

4.2 创建处理程序

接下来,在handler/task.go中处理用户的HTTP请求。

go 复制代码
// handler/task.go
package handler

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

// AddTaskHandler 处理添加任务请求
func AddTaskHandler(c *gin.Context) {
    var json struct {
        Description string `json:"description" binding:"required"`
    }
    if err := c.ShouldBindJSON(&json); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    task := model.AddTask(json.Description)
    c.JSON(http.StatusCreated, task)
}

// GetTasksHandler 处理获取任务列表请求
func GetTasksHandler(c *gin.Context) {
    tasks := model.GetTasks()
    c.JSON(http.StatusOK, tasks)
}

// DeleteTaskHandler 处理删除任务请求
func DeleteTaskHandler(c *gin.Context) {
    id, err := strconv.Atoi(c.Param("id"))
    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid task ID"})
        return
    }
    if model.DeleteTask(id) {
        c.JSON(http.StatusNoContent, nil)
    } else {
        c.JSON(http.StatusNotFound, gin.H{"error": "Task not found"})
    }
}

4.3 主程序

main.go中配置路由并启动HTTP服务器。

go 复制代码
// main.go
package main

import (
    "task-manager/handler"
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()

    router.POST("/tasks", handler.AddTaskHandler)
    router.GET("/tasks", handler.GetTasksHandler)
    router.DELETE("/tasks/:id", handler.DeleteTaskHandler)

    router.Run("localhost:8080")
}

5. 代码运行流程图

以下是项目的代码运行流程图,展示了请求与响应的过程:
POST GET DELETE 添加任务到内存 返回所有任务 根据ID删除任务 用户请求 HTTP请求到达: /tasks 调用AddTaskHandler 调用GetTasksHandler 调用DeleteTaskHandler 返回任务信息 返回任务列表 返回删除结果

6. 测试项目

6.1 启动服务器

在项目目录中运行以下命令以启动服务器:

bash 复制代码
go run main.go

6.2 测试接口

使用Postman或cURL测试API接口。

添加任务

使用以下cURL请求添加一个任务:

bash 复制代码
curl -X POST http://localhost:8080/tasks -H "Content-Type: application/json" -d '{"description": "学习Go语言"}'

查看任务列表

使用以下cURL请求查看当前任务列表:

bash 复制代码
curl -X GET http://localhost:8080/tasks

删除任务

使用以下cURL请求删除任务(假设任务ID为1):

bash 复制代码
curl -X DELETE http://localhost:8080/tasks/1

7. 进一步扩展

7.1 文件存储

如果需要持久化数据,可以考虑使用JSON文件或数据库(如SQLite、PostgreSQL等)来存储任务数据。

7.2 用户管理

可以扩展项目以支持用户注册和登录,使用JWT(JSON Web Token)进行身份验证。

7.3 前端界面

可以构建一个简单的前端应用,使用React或Vue.js与我们的后端API进行交互,提供用户友好的界面。

8. 项目总结

通过今天的学习,我们搭建了一个简单的任务管理系统。我们学到了如何:

  • 设计项目结构
  • 使用Gin框架来创建API
  • 管理内存中的数据
  • 使用HTTP接口与用户交互

怎么样今天的内容还满意吗?再次感谢观众老爷的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!

相关推荐
sleven fung1 分钟前
MinerU与BabelDOC与KTransformers与OpenAI API库
开发语言·python·ai·langchain
米小虾2 分钟前
2026 年多模态大模型全面爆发:从「看懂图」到「听懂世界」的技术跃迁
人工智能
米小虾6 分钟前
AI Agent 进入协议时代:MCP、A2A、AG-UI 三大协议全景解析
人工智能·agent
蝎子莱莱爱打怪8 分钟前
🚀 🚀🚀2026年5月GitHub月榜精选:17个项目中挑出10个推荐,实操4个!
人工智能·后端·ai编程
萤萤七悬14 分钟前
【Python笔记】AI帮实现CLI工具-使用argparse.ArgumentParser接收命令参数
开发语言·笔记·python
升鲜宝供应链及收银系统源代码服务16 分钟前
升鲜宝AI助手项目源码集成开发步骤(一)---升鲜宝生鲜配送供应链管理系统源代码服务
人工智能·生鲜配送系统·生鲜物流线路规划·生鲜电商订单系统·生鲜供应链系统·生鲜系统架构设计·生鲜配送ai功能集成
啦哈拉哈17 分钟前
Leetcode题解记录-hot100(81-100)
算法·leetcode·职场和发展
yjcode78920 分钟前
探索游戏充值新纪元:友价源码技术革新之旅
大数据·人工智能·游戏·游戏交易
iCxhust24 分钟前
C# 命令行指令 查看二进制文件
开发语言·单片机·嵌入式硬件·c#·proteus·微机原理·8088单板机
csdn_aspnet28 分钟前
Java 霍尔分区算法(Hoare‘s Partition Algorithm)
java·开发语言·算法