Go語言用Gin實(shí)現(xiàn)圖書管理接口的實(shí)現(xiàn)示例
在 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. 獲取所有圖書
GET /books - 2. 根據(jù)ID獲取圖書
GET /books/:id - 3. 添加圖書
POST /books - 4. 更新圖書
PUT /books/:id - 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?是一種用于存儲(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ù)的方法示例
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?語言的?goroutine?和通道(channel)非常適合用來并發(fā)地處理數(shù)據(jù),本文將通過簡(jiǎn)單示例介紹一下如何使用Go語言并發(fā)地處理?CSV?文件并將數(shù)據(jù)插入到數(shù)據(jù)庫中,感興趣的可以了解下2025-01-01
go語言開發(fā)環(huán)境安裝及第一個(gè)go程序(推薦)
這篇文章主要介紹了go語言開發(fā)環(huán)境安裝及第一個(gè)go程序,這篇通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
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的具體使用,文中通過示例代碼介紹的非常詳細(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)算的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
golang?slice中常見性能優(yōu)化手段總結(jié)
這篇文章主要為大家詳細(xì)一些Golang開發(fā)中常用的slice關(guān)聯(lián)的性能優(yōu)化手段,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10

