亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語言用Gin實(shí)現(xiàn)圖書管理接口的實(shí)現(xiàn)示例

 更新時(shí)間:2025年08月14日 10:06:50   作者:程序員愛釣魚  
本文主要介紹了Go語言用Gin實(shí)現(xiàn)圖書管理接口的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 Web API 開發(fā)中,最常見的場(chǎng)景之一就是構(gòu)建 增刪改查(CRUD)  接口。
本篇我們將用 Gin 框架 來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖書管理系統(tǒng) API,數(shù)據(jù)會(huì)存儲(chǔ)在內(nèi)存中(方便演示),但結(jié)構(gòu)設(shè)計(jì)可方便以后替換為數(shù)據(jù)庫。

一、功能目標(biāo)

我們要實(shí)現(xiàn)以下接口:

  1. 1. 獲取所有圖書 GET /books
  2. 2. 根據(jù)ID獲取圖書 GET /books/:id
  3. 3. 添加圖書 POST /books
  4. 4. 更新圖書 PUT /books/:id
  5. 5. 刪除圖書 DELETE /books/:id

二、項(xiàng)目初始化

確保你已安裝 Go 1.18+ 和 Gin:

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

三、代碼實(shí)現(xiàn)

package main

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

// 圖書結(jié)構(gòu)體
type Book struct {
    ID     int    `json:"id"`
    Title  string `json:"title"`
    Author string `json:"author"`
}

var books = []Book{
    {ID: 1, Title: "Go語言實(shí)戰(zhàn)", Author: "張三"},
    {ID: 2, Title: "Gin框架入門", Author: "李四"},
}

// 獲取所有圖書
func getBooks(c *gin.Context) {
    c.JSON(http.StatusOK, books)
}

// 根據(jù)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, 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")
}

四、運(yùn)行與測(cè)試

運(yùn)行服務(wù):

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語言進(jìn)階","author":"張三改"}'

5. 刪除圖書

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

五、總結(jié)

  • • 使用 Gin 可以非常輕松地構(gòu)建 RESTful API
  • • 路由映射到不同的處理函數(shù)
  • • JSON 參數(shù)解析只需 ShouldBindJSON
  • • 后續(xù)可以把 books 切片替換為數(shù)據(jù)庫(MySQL、PostgreSQL、MongoDB等)

到此這篇關(guān)于Go語言用Gin實(shí)現(xiàn)圖書管理接口的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Gin 圖書管理接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 淺析Go語言中的map數(shù)據(jù)結(jié)構(gòu)是如何實(shí)現(xiàn)的

    淺析Go語言中的map數(shù)據(jù)結(jié)構(gòu)是如何實(shí)現(xiàn)的

    在?Go?中,map?是一種用于存儲(chǔ)鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),它提供了一種快速查找和訪問數(shù)據(jù)的方式,下面我們就來看看Go語言中是如何實(shí)現(xiàn)map數(shù)據(jù)結(jié)構(gòu)的吧
    2024-03-03
  • 利用Golang解析json數(shù)據(jù)的方法示例

    利用Golang解析json數(shù)據(jù)的方法示例

    Go提供了原生的JSON庫,并且與語言本身有效的集成在了一起。下面這篇文章將給大家介紹關(guān)于利用Golang解析json數(shù)據(jù)的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • 使用Go語言實(shí)現(xiàn)并發(fā)處理CSV文件到數(shù)據(jù)庫

    使用Go語言實(shí)現(xiàn)并發(fā)處理CSV文件到數(shù)據(jù)庫

    Go?語言的?goroutine?和通道(channel)非常適合用來并發(fā)地處理數(shù)據(jù),本文將通過簡(jiǎn)單示例介紹一下如何使用Go語言并發(fā)地處理?CSV?文件并將數(shù)據(jù)插入到數(shù)據(jù)庫中,感興趣的可以了解下
    2025-01-01
  • go-cqhttp智能聊天功能的實(shí)現(xiàn)

    go-cqhttp智能聊天功能的實(shí)現(xiàn)

    這篇文章主要介紹了go-cqhttp智能聊天功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • go語言開發(fā)環(huán)境安裝及第一個(gè)go程序(推薦)

    go語言開發(fā)環(huán)境安裝及第一個(gè)go程序(推薦)

    這篇文章主要介紹了go語言開發(fā)環(huán)境安裝及第一個(gè)go程序,這篇通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Golang嵌入資源文件實(shí)現(xiàn)步驟詳解

    Golang嵌入資源文件實(shí)現(xiàn)步驟詳解

    在應(yīng)用程序中附帶代碼以外的其他資源可能會(huì)很有用,常用的實(shí)現(xiàn)方法是嵌入對(duì)象或數(shù)據(jù)。在數(shù)據(jù)庫中存儲(chǔ)數(shù)據(jù)應(yīng)用中,需要定義schema,在應(yīng)用啟動(dòng)時(shí)創(chuàng)建表,但如果找不到schema文件呢?Go1.16提供embed包讓實(shí)現(xiàn)變得簡(jiǎn)單,之前很多第三方包實(shí)現(xiàn)類似功能
    2023-01-01
  • golang 實(shí)現(xiàn)每隔幾分鐘執(zhí)行一個(gè)函數(shù)

    golang 實(shí)現(xiàn)每隔幾分鐘執(zhí)行一個(gè)函數(shù)

    這篇文章主要介紹了golang 實(shí)現(xiàn)每隔幾分鐘執(zhí)行一個(gè)函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang語言實(shí)現(xiàn)gRPC的具體使用

    Golang語言實(shí)現(xiàn)gRPC的具體使用

    本文主要介紹了Golang語言實(shí)現(xiàn)gRPC的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • go面向?qū)ο蠓绞讲僮鱆SON庫實(shí)現(xiàn)四則運(yùn)算

    go面向?qū)ο蠓绞讲僮鱆SON庫實(shí)現(xiàn)四則運(yùn)算

    這篇文章主要為大家介紹了go面向?qū)ο蠓绞讲僮鱆SON庫實(shí)現(xiàn)四則運(yùn)算的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • golang?slice中常見性能優(yōu)化手段總結(jié)

    golang?slice中常見性能優(yōu)化手段總結(jié)

    這篇文章主要為大家詳細(xì)一些Golang開發(fā)中常用的slice關(guān)聯(lián)的性能優(yōu)化手段,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10

最新評(píng)論