最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

運(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Go語言實(shí)現(xiàn)定時器的方法

    Go語言實(shí)現(xiàn)定時器的方法

    這篇文章主要介紹了Go語言實(shí)現(xiàn)定時器的方法,涉及Go語言時間操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go實(shí)現(xiàn)各類限流的方法

    Go實(shí)現(xiàn)各類限流的方法

    這篇文章主要介紹了Go實(shí)現(xiàn)各類限流的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Go之errors.New和fmt.Errorf?的區(qū)別小結(jié)

    Go之errors.New和fmt.Errorf?的區(qū)別小結(jié)

    本文主要介紹了Go之errors.New和fmt.Errorf的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • 特殊字符的json序列化總結(jié)大全

    特殊字符的json序列化總結(jié)大全

    這篇文章主要給大家介紹了關(guān)于特殊字符的json序列化的相關(guān)資料,通過示例代碼分別給大家介紹了關(guān)于python 、 rust 、 java 和golang對特殊字符的json序列化操作,需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Golang學(xué)習(xí)之無類型常量詳解

    Golang學(xué)習(xí)之無類型常量詳解

    對于無類型常量,可能大家是第一次聽說,但我們每天都在用,每天都有無數(shù)潛在的坑被埋下。本文就來和大家聊聊它的相關(guān)注意事項(xiàng)吧,希望對大家有所幫助
    2023-03-03
  • Go語言的文件操作代碼匯總

    Go語言的文件操作代碼匯總

    本文給大家匯總介紹了go語言中的文件操作的代碼,包括文件的讀寫,文件的新建打開和刪除等,希望對大家學(xué)習(xí)go語言能夠有所幫助
    2018-10-10
  • Go 并發(fā)讀寫 sync.map 詳細(xì)

    Go 并發(fā)讀寫 sync.map 詳細(xì)

    閱讀本文你將會明確 sync.Map 和原生 map +互斥鎖/讀寫鎖之間的性能情況。標(biāo)準(zhǔn)庫 sync.Map 雖說支持并發(fā)讀寫 map,但更適用于讀多寫少的場景,因?yàn)樗麑懭氲男阅鼙容^差,使用時要考慮清楚這一點(diǎn)。
    2021-10-10
  • golang Iris運(yùn)行多個應(yīng)用的實(shí)現(xiàn)

    golang Iris運(yùn)行多個應(yīng)用的實(shí)現(xiàn)

    本文主要介紹了golang Iris運(yùn)行多個應(yīng)用的實(shí)現(xiàn),在Iris里面,提供了一種方式可以讓我們同時運(yùn)行多個應(yīng)用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Golang中多個if代碼優(yōu)化小技巧

    Golang中多個if代碼優(yōu)化小技巧

    這篇文章主要為大家詳細(xì)介紹了Golang中一些常用的if代碼優(yōu)化小技巧,w文中的示例代碼簡潔易懂,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Golang rxgo庫的具體使用

    Golang rxgo庫的具體使用

    本文主要介紹了Golang rxgo庫的具體使用,類似于JavaStream的流式編程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02

最新評論

永清县| 南安市| 辽中县| 兴安县| 平利县| 弥渡县| 井冈山市| 漯河市| 瑞金市| 鄂伦春自治旗| 额尔古纳市| 舒兰市| 罗甸县| 淳安县| 红桥区| 唐山市| 阜新市| 甘南县| 深圳市| 高台县| 阿拉善盟| 尤溪县| 中江县| 克拉玛依市| 泾川县| 贵定县| 揭东县| 遂溪县| 沐川县| 裕民县| 会泽县| 策勒县| 班戈县| 营山县| 锡林郭勒盟| 珲春市| 临泽县| 龙江县| 越西县| 南开区| 信阳市|