开发者

Go语言用Gin实现图书管理接口的实现示例

开发者 https://www.devze.com 2025-08-15 10:46 出处:网络 作者: 程序员爱钓鱼
目录一、功能目标二、项目初始化三、代码实现四、运行与测试1. 获取所有图书2. 获取单本图书3. 添加图书4. 更新图书5. 删除图书五、总结在 Web API 开发中,最常见的场景之一就是构建 增删改查(CRUD)  接
目录
  • 一、功能目标
  • 二、项目初始化
  • 三、代码实现
  • 四、运行与测试
    • 1. 获取所有图书
    • 2. 获取单本图书
    • 3. 添加图书
    • 4. 更新图书
    • 5. 删除图书
  • 五、总结

    在 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 main
    
    import (
        "github.com/gin-gophpnic/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 Book
        if err := c.ShouldBindJSON(&newBook); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
    
        // 模拟自增ID
        newBook.ID = len(books) + 1
        books = append(books, newBook)
    
        c.JSON(http.StatusCreated, newBook)
    }
    
    // 更新图书
    func updateBook(c *gin.Context) {
        idStr := c.Param("id")
        id, _ := strconv.Atoi(idStr)
    
        var updateData Book
        if 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.Title
                books[i].Author = updateData.Author
                c.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, gpythonin.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 "Conjavascripttent-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等)

    到此这篇关于Go语言用Gin实现图书管理接口的实现示例的文章就介绍到这了,更多相关Gin 图书管理接口内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)! 

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号