当前位置: 首页 > java >正文

Go语言实战案例:用Gin实现图书管理接口

在 Web API 开发中,最常见的场景之一就是构建 增删改查(CRUD) 接口。
本篇我们将用 Gin 框架 来实现一个简单的图书管理系统 API,数据会存储在内存中(方便演示),但结构设计可方便以后替换为数据库。


一、功能目标

我们要实现以下接口:

  1. 1. 获取所有图书 GET /books
  2. 2. 根据ID获取图书 GET /books/:id
  3. 3. 添加图书 POST /books
  4. 4. 更新图书 PUT /books/:id
  5. 5. 删除图书 DELETE /books/:id

二、项目初始化

确保你已安装 Go 1.18+ 和 Gin:

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

三、代码实现

package mainimport ("github.com/gin-gonic/gin""net/http""strconv"
)// 图书结构体
type Book struct {ID     int    `json:"id"`Title  string `json:"title"`Author string `json:"author"`
}var books = []Book{{ID: 1, Title: "Go语言实战", Author: "张三"},{ID: 2, Title: "Gin框架入门", Author: "李四"},
}// 获取所有图书
func getBooks(c *gin.Context) {c.JSON(http.StatusOK, books)
}// 根据ID获取图书
func getBookByID(c *gin.Context) {idStr := c.Param("id")id, _ := strconv.Atoi(idStr)for _, book := range books {if book.ID == id {c.JSON(http.StatusOK, book)return}}c.JSON(http.StatusNotFound, gin.H{"error": "图书不存在"})
}// 添加图书
func addBook(c *gin.Context) {var newBook Bookif err := c.ShouldBindJSON(&newBook); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// 模拟自增IDnewBook.ID = len(books) + 1books = append(books, newBook)c.JSON(http.StatusCreated, newBook)
}// 更新图书
func updateBook(c *gin.Context) {idStr := c.Param("id")id, _ := strconv.Atoi(idStr)var updateData Bookif err := c.ShouldBindJSON(&updateData); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}for i, book := range books {if book.ID == id {books[i].Title = updateData.Titlebooks[i].Author = updateData.Authorc.JSON(http.StatusOK, books[i])return}}c.JSON(http.StatusNotFound, gin.H{"error": "图书不存在"})
}// 删除图书
func deleteBook(c *gin.Context) {idStr := c.Param("id")id, _ := strconv.Atoi(idStr)for i, book := range books {if book.ID == id {books = append(books[:i], books[i+1:]...)c.JSON(http.StatusOK, gin.H{"message": "删除成功"})return}}c.JSON(http.StatusNotFound, gin.H{"error": "图书不存在"})
}func main() {r := gin.Default()r.GET("/books", getBooks)r.GET("/books/:id", getBookByID)r.POST("/books", addBook)r.PUT("/books/:id", updateBook)r.DELETE("/books/:id", deleteBook)r.Run(":8080")
}

四、运行与测试

运行服务:

go run main.go

1. 获取所有图书

curl http://localhost:8080/books

2. 获取单本图书

curl http://localhost:8080/books/1

3. 添加图书

curl -X POST http://localhost:8080/books \-H "Content-Type: application/json" \-d '{"title":"Go Web编程","author":"王五"}'

4. 更新图书

curl -X PUT http://localhost:8080/books/1 \-H "Content-Type: application/json" \-d '{"title":"Go语言进阶","author":"张三改"}'

5. 删除图书

curl -X DELETE http://localhost:8080/books/2

五、总结

  • • 使用 Gin 可以非常轻松地构建 RESTful API
  • • 路由映射到不同的处理函数
  • • JSON 参数解析只需 ShouldBindJSON
  • • 后续可以把 books 切片替换为数据库(MySQL、PostgreSQL、MongoDB等)

http://www.xdnf.cn/news/17851.html

相关文章:

  • 云原生俱乐部-k8s知识点归纳(1)
  • 当GitHub宕机时,我们如何协作?
  • Flutter sqflite插件
  • Docker运行python项目:使用Docker成功启动FastAPI应用
  • Java 中导出 Excel 文件的方法
  • 本地jar导入到本地仓科和远程仓库
  • [ HTML 前端 ] 语法介绍和HBuilderX安装
  • Spring Boot 3中JWT密钥安全存储方案
  • 图灵测试:人工智能的“行为主义判据”与哲学争议
  • 论,物联网日志系统架构如何设计?
  • 使用colmap自制3DGaussian_Splatting数据集
  • Java进阶学习之Stream流的基本概念以及使用技巧
  • 第四天~在CANFD或CAN2.0的ARXML文件中实现Multiplexor多路复用信号实战
  • 3D-R1、Scene-R1、SpaceR论文解读
  • Codeforces Round 1042 (Div. 3)
  • Ansys FreeFlow入门:对搅拌罐进行建模
  • vector 认识及使用
  • 【论文阅读-Part1】PIKE-RAG: sPecIalized KnowledgE and Rationale Augmented Generation
  • 如何通过WiFi将文件从安卓设备传输到电脑
  • Scrapy 基础框架搭建教程:从环境配置到爬虫实现(附实例)
  • Pytorch在FSDP模型中使用EMA
  • 考研408《计算机组成原理》复习笔记,第四章(3)——指令集、汇编语言
  • 14、C 语言联合体和枚举知识点总结
  • Linux系统Namespace隔离实战:dd/mkfs/mount/unshare命令组合应用
  • 报数游戏(我将每文更新tips)
  • 2022 年全国硕士研究生招生考试真题笔记
  • 杂记 01
  • elasticsearch基础概念与集群部署
  • Blender模拟结构光3D Scanner(一)外参数匹配
  • ARM芯片架构之CoreSight Channel Interface 介绍