Gin框架與Apifox

第一部分:技術棧概述

1. Go語言簡介

Go(又稱Golang)是Google開發的一門靜態類型、編譯型編程語言,具有以下特點:

  • 高性能:編譯為機器碼,執行效率接近C/C++

  • 簡潔語法:沒有復雜的OOP概念,學習曲線平緩

  • 原生并發:goroutine和channel實現高效并發

  • 強大標準庫:內置HTTP、JSON、加密等常用功能

  • 跨平臺:可編譯為Windows、Linux、macOS等平臺的可執行文件

2. Gin框架介紹

Gin是一個用Go編寫的高性能HTTP Web框架:

  • 極速路由:基于httprouter,路由匹配速度極快

  • 中間件支持:方便擴展認證、日志等功能

  • JSON友好:內置高效JSON處理

  • 適合API開發:輕量級設計,專注于HTTP服務

3. 開發工具鏈

  • VSCode:輕量級代碼編輯器,配合Go插件提供智能提示

  • Apifox:API調試工具,可替代Postman,支持:

    • 接口測試

    • 文檔生成

    • Mock數據

    • 團隊協作

第二部分:項目構建

1.創建項目

mkdir gin-api-demo
cd gin-api-demo
go mod init gin-api-demo 
//是一個 Go 語言的模塊初始化命令,用于創建一個新的 Go 模塊(module)。這個命令會生成一個 go.mod 文件,該文件用于管理項目的依賴關系。go get -u github.com/gin-gonic/gin 
//用于下載并安裝 Gin 框架,-u 表示 "update"(更新),如果當前目錄有 go.mod 文件,會自動添加 Gin 作為依賴項,并記錄版本號,同時生成/更新 go.sum 文件,記錄依賴包的哈希校驗值(確保安全性)go mod tidy
//Go 模塊(module)管理中的一個重要命令,用于整理和優化項目的依賴關系
//添加缺失的依賴,移除未使用的依賴,同步依賴版本

2.創建main.go文件

package mainimport ("net/http""github.com/gin-gonic/gin"
)func main() {r := gin.Default()// 定義路由r.GET("/", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "Hello, Gin!",})})// 啟動服務器(默認 8080 端口)r.Run()
}

3.運行

go run main.go

瀏覽器訪問?http://localhost:8080

第三部分:用戶管理API

1.定義用戶結構體

在?main.go?中添加:

type User struct {ID   string `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}var users = []User{{ID: "1", Name: "張三", Age: 20},{ID: "2", Name: "李四", Age: 25},
}

2.獲取所有用戶(GET/users)

r.GET("/users", func(c *gin.Context) {c.JSON(http.StatusOK, users)
})

3.創建用戶(POST/users)

r.POST("/users", func(c *gin.Context) {var newUser Userif err := c.ShouldBindJSON(&newUser); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}users = append(users, newUser)c.JSON(http.StatusCreated, newUser)
})

4.獲取單個用戶(GET /users/:id

r.GET("/users/:id", func(c *gin.Context) {id := c.Param("id")for _, user := range users {if user.ID == id {c.JSON(http.StatusOK, user)return}}c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
})

5.完整代碼

package mainimport ("net/http""github.com/gin-gonic/gin"
)type User struct {ID   string `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}var users = []User{{ID: "1", Name: "張三", Age: 20},{ID: "2", Name: "李四", Age: 25},
}func main() {r := gin.Default()r.GET("/", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "Hello, Gin!",})})r.GET("/users", func(c *gin.Context) {c.JSON(http.StatusOK, users)})r.POST("/users", func(c *gin.Context) {var newUser Userif err := c.ShouldBindJSON(&newUser); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}users = append(users, newUser)c.JSON(http.StatusCreated, newUser)})r.GET("/users/:id", func(c *gin.Context) {id := c.Param("id")for _, user := range users {if user.ID == id {c.JSON(http.StatusOK, user)return}}c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})})r.Run()
}

第四部分:使用 Apifox 測試 API

1.啟動服務

go run main.go

2.在 Apifox 中測試

  1. 新建項目?→?新建接口

  2. 測試?GET /users

    • 方法:?GET

    • URL:?http://localhost:8080/users

    • 點擊?發送,應該返回用戶列表

3.測試?POST /users

  • 方法:?POST

  • URL:?http://localhost:8080/users

  • Body (JSON):

{"id": "3","name": "王五","age": 30
}
  • 點擊?發送,應該返回創建的用戶

可以看到狀態碼響應不對,可以進行修改

4.測試 GET?/users/:id

  • 方法:?GET

  • URL:?http://localhost:8080/users/1

  • 點擊?發送,應該返回 ID 為 1 的用戶

第五部分:生成Swagger 文檔導入 Apifox

1.安裝 Swagger 工具

//安裝 swag 命令行工具
go install github.com/swaggo/swag/cmd/swag@latest
//驗證安裝
swag --version  # 應輸出版本號(如 v1.16.3)
//安裝 Gin 的 Swagger 依賴
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files

2.為代碼添加 Swagger 注釋

(1) 在 main.go 頂部添加全局注釋
// @title          用戶管理 API(Swagger 版)
// @version        1.0
// @description    這是一個使用 Gin 和 Swagger 實現的用戶管理 API
// @host      localhost:8080
// @BasePath  /
func main() {r := gin.Default()// ...(原有代碼)
}(2) 為每個路由添加注釋
示例 1:GET /users(獲取所有用戶)
// GetUsers 獲取所有用戶
// @Summary      獲取用戶列表
// @Description  返回所有用戶數據
// @Tags         users
// @Accept       json
// @Produce      json
// @Success      200  {array}   User
// @Router       /users [get]
func GetUsers(c *gin.Context) {c.JSON(http.StatusOK, users)
}
示例 2:POST /users(創建用戶)
// CreateUser 創建用戶
// @Summary      創建新用戶
// @Description  接收 JSON 數據并創建用戶
// @Tags         users
// @Accept       json
// @Produce      json
// @Param        user  body      User  true  "用戶信息"
// @Success      201  {object}  User
// @Failure      400  {object}  map[string]string
// @Router       /users [post]
func CreateUser(c *gin.Context) {var newUser Userif err := c.ShouldBindJSON(&newUser); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}users = append(users, newUser)c.JSON(http.StatusCreated, newUser)
}
示例 3:GET /users/:id(獲取單個用戶)
// GetUserByID 獲取單個用戶
// @Summary      根據ID獲取用戶
// @Description  返回指定ID的用戶數據
// @Tags         users
// @Accept       json
// @Produce      json
// @Param        id   path      string  true  "用戶ID"
// @Success      200  {object}  User
// @Failure      404  {object}  map[string]string
// @Router       /users/{id} [get]
func GetUserByID(c *gin.Context) {id := c.Param("id")for _, user := range users {if user.ID == id {c.JSON(http.StatusOK, user)return}}c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
}

3.生成 Swagger 文檔

//(1) 運行 swag init
swag init
//生成文件:
docs/
├── docs.go       # Go 代碼
├── swagger.json  # Swagger 文檔(JSON 格式)
└── swagger.yaml  # Swagger 文檔(YAML 格式)//(2) 導入 docs 包到 main.go
import (swaggerFiles "github.com/swaggo/files"     // Swagger UI 靜態文件ginSwagger "github.com/swaggo/gin-swagger" // Gin 的 Swagger 中間件_ "github.com/gin-api-demo/docs"替換為你的模塊名(和 go.mod 一致)// ...其他導入
)//(3)打開項目根目錄的 go.mod 文件,第一行應類似:
module github.com/你的用戶名/gin-api-demo  (沒有用戶名就不寫)//(4) 添加 Swagger UI 路由
func main() {r := gin.Default()r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))// ...(其他路由)r.Run()
}//最后來一下go mod tidy   養成好習慣

4.運行并訪問 Swagger UI

//(1) 啟動服務器
go run main.go
//(2) 訪問 Swagger UI
http://localhost:8080/swagger/index.html

?5.導入 Swagger 到 Apifox

(1) 導出?swagger.json

文件路徑:docs/swagger.json

(2) 在 Apifox 中導入

  1. 打開 Apifox → 項目 → 導入 → 選擇?swagger.json

  2. 點擊?確定,Apifox 會自動解析所有接口。

(3) 在 Apifox 中測試

  • 查看自動生成的接口文檔。

  • 直接發送請求測試(無需手動配置參數)。

總結:swagger文檔和apifox搭配可以更加方便導入項目的接口。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88242.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88242.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88242.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker 容器技術入門與環境部署

一、Docker 技術概述與核心概念解析 (一)Docker 技術本質與定位 Docker 是當前主流的操作系統級容器虛擬化技術,其核心價值在于通過輕量化隔離機制解決開發、測試與生產環境的一致性問題。與傳統虛擬機(如 VMware)相…

π0源碼(openpi)剖析——從π0模型架構的實現:如何基于PaLI-Gemma和擴散策略去噪生成動作,到基于C/S架構下的模型訓練與部署

前言 ChatGPT出來后的兩年多,也是我瘋狂寫博的兩年多(年初deepseek更引爆了下),比如從創業起步時的15年到后來22年之間 每年2-6篇的,干到了23年30篇、24年65篇、25年前兩月18篇,成了我在大模型和具身的原始技術積累 如今一轉眼已…

Vui:輕量級語音對話模型整合包,讓交互更自然

Vui:輕量級語音對話模型,讓交互更自然 🗣?? Vui 是 Fluxions-AI 團隊推出的一款開源輕量級語音對話模型,其核心架構基于 LLaMA。這款模型經過了長達 4 萬小時的真實對話數據訓練,能夠逼真地模擬人類對話中的語氣詞、…

【STL】深入理解 string 的底層思想

一、STL的定義 STL是C標準庫的一部分它不僅是一個可復用的組件庫還是一個包含數據結構和算法的軟件框架。 二、STL的歷史和版本 原始版本: Alexander Stepanov、Meng Lee在惠普實驗室完成的原始版本,本著開源精神,他們聲明允許任何人任意運…

深入剖析Linux epoll模型:從LT/ET模式到EPOLLONESHOT的實戰指南

一、epoll:高性能I/O復用的核心引擎 epoll是Linux內核2.6引入的高效I/O多路復用機制,專為解決C10K問題而生。相比select/poll,epoll在連接數激增時性能優勢顯著: // 創建epoll實例 int epollfd epoll_create1(0);// 事件注冊 s…

網絡安全之某cms的漏洞分析

漏洞描述 該漏洞源于Appcenter.php存在限制,但攻擊者仍然可以通過繞過這些限制并以某種方式編寫代碼,使得經過身份驗證的攻擊者可以利用該漏洞執行任意命令 漏洞分析 繞過編輯模板限制,從而實現RCE 這里可以修改模板文件,但是不…

Nginx-前端跨域解決方案!

1 Nginx 核心 Nginx 是一個開源的高性能 HTTP 和反向代理服務器,以輕量級、高并發處理能力和低資源消耗著稱。除作為 Web 服務器外,還可充當郵件代理服務器和通用的 TCP/UDP 代理服務器,廣泛應用于現代 Web 架構中。 在 Windows 系統中使用…

RedisVL 入門構建高效的 AI 向量搜索應用

一、前置條件 在開始之前,請確保: 已在 Python 環境中安裝 redisvl。運行 Redis Stack 或 Redis Cloud 實例。 二、定義索引架構(IndexSchema) 索引架構(IndexSchema)用于定義 Redis 的索引配置和字段信…

基于ssm移動學習平臺微信小程序源碼數據庫文檔

摘 要 由于APP軟件在開發以及運營上面所需成本較高,而用戶手機需要安裝各種APP軟件,因此占用用戶過多的手機存儲空間,導致用戶手機運行緩慢,體驗度比較差,進而導致用戶會卸載非必要的APP,倒逼管理者必須改…

【Python】Tkinter模塊(巨詳細)

專欄文章索引:Python 有問題可私聊:QQ:3375119339 本文內容系本人根據閱讀的《Python GUI設計tkinter從入門到實踐》所得,以自己的方式進行總結和表達。未經授權,禁止在任何平臺上以任何形式復制或發布原始書籍的內容。如有侵權,請聯系我刪除。 目錄 一、Tkinter與GUI …

【C++特殊工具與技術】局部類

在 C 的類體系中,除了全局類、嵌套類(在類內部定義的類),還有一種特殊的存在 ——局部類(Local Class)。它像函數內部的 “封閉王國”,作用域嚴格限制在所屬函數內,既擁有類的封裝特…

《C#圖解教程 第5版》深度推薦

《C#圖解教程 第5版》深度推薦 在 C# 編程語言的浩瀚學習資源中,《C#圖解教程 第5版》宛如一座燈塔,為開發者照亮前行之路。通過其詳實的目錄,我們能清晰窺見這本書在知識架構、學習引導上的匠心獨運,無論是編程新手還是進階開發者…

【Kubernetes】配置自定義的 kube-scheduler 調度規則

在最近一次 K8s 環境的維護中,發現多個 Pod 使用相同鏡像時,調度到固定節點的問題導致集群節點資源分配不均的情況。 啟用調度器的打分日志后發現這一現象是由 ImageLocality 打分策略所引起的(所有的節點中,只有一個節點有運行該…

跟著AI學習C# Day21

📅 Day 21:動態類型與動態語言運行時(Dynamic Types & DLR) ? 學習目標: 理解什么是 dynamic 類型;掌握 dynamic 與 object 的區別;理解 DLR(Dynamic Language Runtime&#…

leetcode-3085.成為K字符串需要刪除的最小字符串數

題目描述 解題思路 這題不難想到需要統計每個字母的出現頻率,一共有26個字母,故cnt數組有26維。我們可以枚舉其中一種作為「刪除操作結束后出現頻率最低的字符」,將其設置為 c,那么所有頻率小于 c 的字符都會被刪除,所…

Android 中 解析 XML 文件的幾種方式

在 Android 開發中,解析 XML 文件有多種方式,每種方式都有其特點和適用場景。常見的 XML 解析方式有 DOM 解析、SAX 解析 和 XmlPullParser 解析。 一、xml 文件及數據類 1、xml 文件 將測試用 book.xml 文件放在項目的 app/src/main/assets 目錄下,文件內容如下:<lib…

python里的abc庫是什么東西

Python 中的 ABC&#xff1a;為什么你需要抽象基類&#xff1f;告別“假鴨子”&#xff0c;擁抱真抽象&#xff01; 你是不是經常在 Python 項目中感到困惑&#xff1a;我定義了一個類&#xff0c;希望它能被其他類繼承并實現某些特定功能&#xff0c;但又不想它被直接實例化&…

設計模式精講 Day 9:裝飾器模式(Decorator Pattern)

【設計模式精講 Day 9】裝飾器模式&#xff08;Decorator Pattern&#xff09; 文章內容 在軟件開發中&#xff0c;靈活擴展功能是提升系統可維護性和可復用性的關鍵。裝飾器模式作為一種結構型設計模式&#xff0c;為對象動態地添加職責&#xff0c;而無需通過繼承來實現。它…

瀏覽器無法訪問:Nginx下的基于域名的虛擬主機

檢查步驟如下&#xff1a; 1、nginx -t &#xff0c;檢查配置文件是否有語法錯誤 [root89 ~]# nginx -t nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx/conf/nginx.conf test is successful # 可以看到 配置…

【appium】6.appium遇到的問題

1.appium-python-client 修改版本1.5 為5.1.1,后執行python程序時&#xff0c;提示&#xff1a; raise TypeError( TypeError: missing 1 required keyword-only argument: options (instance of driver options.Options class) 你遇到的錯誤&#xff1a; TypeError: missing…