淺析Gin框架中路由參數(shù)的使用
1. 簡(jiǎn)介
本文將主要介紹 Gin
框架中對(duì)于路由參數(shù)支持的特性。我們將從RESTful
成為主要API設(shè)計(jì)風(fēng)格出發(fā),推導(dǎo)出我們?cè)谠O(shè)計(jì)API時(shí),應(yīng)該同樣盡量遵循該規(guī)范?;诖耍覀儗⒁雎酚蓞?shù)在 RESTful
風(fēng)格 API
實(shí)現(xiàn)上,所能起到的不可或缺的作用。
接下來(lái),我們將詳細(xì)介紹Gin
框架中對(duì)于路由參數(shù)的使用。具體來(lái)說(shuō),我們將介紹路由參數(shù)的基本語(yǔ)法,以及路由匹配和路由參數(shù)值提取等相關(guān)內(nèi)容,以幫助讀者更好地對(duì)Gin
框架中路由參數(shù)進(jìn)行使用。
2. 問(wèn)題引入
RESTful
風(fēng)格的 API
是一種用于構(gòu)建Web應(yīng)用程序和服務(wù)的設(shè)計(jì)風(fēng)格。簡(jiǎn)單來(lái)說(shuō),RESTful
風(fēng)格的設(shè)計(jì)將所有數(shù)據(jù)都視為資源(如文章,視頻),并使用統(tǒng)一的接口和標(biāo)準(zhǔn)化的HTTP方法來(lái)管理和訪(fǎng)問(wèn)這些資源。
在現(xiàn)代Web應(yīng)用程序中,RESTful
風(fēng)格的API
已經(jīng)比較流行。比方說(shuō),我們可以隨便查看掘金的一篇文章:
亦或者是在視頻網(wǎng)站,隨便查看一個(gè)視頻的內(nèi)容:
可以看到,這兩個(gè)網(wǎng)站中每一篇文章,亦或者是每個(gè)視頻,都會(huì)對(duì)應(yīng)著一個(gè)具體的API。而這恰恰滿(mǎn)足了RESTful API設(shè)計(jì)的核心思想,面向資源設(shè)計(jì)。
雖然在實(shí)際開(kāi)發(fā)過(guò)程中,我們應(yīng)該根據(jù)具體業(yè)務(wù)場(chǎng)景和需求來(lái)靈活運(yùn)用RESTful
風(fēng)格的API
,但是既然當(dāng)前RESTful
風(fēng)格API
已經(jīng)在現(xiàn)代Web應(yīng)用程序中有被廣泛使用,說(shuō)明其肯定是存在一些優(yōu)點(diǎn),那么我們?cè)谠O(shè)計(jì)Web應(yīng)用,設(shè)計(jì)API時(shí),是不是應(yīng)該盡量滿(mǎn)足RESTful
風(fēng)格呢?
這里假設(shè)我們?cè)O(shè)計(jì)一個(gè)博客網(wǎng)站,同時(shí)API
設(shè)計(jì)采用RESTful
風(fēng)格,此時(shí)API
大概如下:
# 指向某一篇文章 GET /article/posts/123
假如我們網(wǎng)站有10w篇文章,此時(shí)會(huì)存在10w個(gè)URL,大概如下:
GET /article/posts/1 ... GET /article/posts/100000
如果我們?yōu)槊恳粋€(gè)URL都設(shè)計(jì)一個(gè)處理函數(shù),這里就需要10w個(gè)處理函數(shù),這個(gè)是不可能的,同時(shí)是不可擴(kuò)展的。那這里能怎么辦呢? 其實(shí)就可以通過(guò) 路由參數(shù) 特性,實(shí)現(xiàn)一個(gè)處理函數(shù),來(lái)對(duì)10w個(gè)類(lèi)似的URL進(jìn)行處理。
3. 路由參數(shù)
3.1 什么是路由參數(shù)
這里先簡(jiǎn)單理解一下什么是路由參數(shù)。路由參數(shù)其實(shí)是在Web應(yīng)用程序中,用于從URL中提取動(dòng)態(tài)值的一種機(jī)制。
在許多Web框架中,路由參數(shù)通常由:
符號(hào)后面的文本表示,并可以捕獲與該部分匹配的任意字符串或數(shù)字。例如,我們有一個(gè)帶有動(dòng)態(tài)路由的博客網(wǎng)站,那么我們可能會(huì)使用以下路由定義:
GET /article/posts/:id
在這個(gè)例子中,:id
就是一個(gè)路由參數(shù),用于捕獲URL中的文章ID。這樣,當(dāng)用戶(hù)請(qǐng)求/article/posts/123
的時(shí)候,我們的應(yīng)用程序就可以提取出 123
這個(gè)動(dòng)態(tài)值,并使用它返回與之相關(guān)的文章。
這樣子,即使我們網(wǎng)站有10w篇文章,對(duì)應(yīng)著10w個(gè)URL,也只需要設(shè)計(jì)一個(gè)處理函數(shù),從處理函數(shù)從中提取出路由參數(shù),執(zhí)行對(duì)應(yīng)的處理即可。
而 Gin
框架是支持路由參數(shù)的,下面就讓我們來(lái)看看如何使用 Gin
框架的路由參數(shù)特性。
3.2 Gin框架中路由參數(shù)的使用
3.2.1 基本語(yǔ)法
在 Gin
框架中,路由參數(shù)同樣也是使用冒號(hào):
作為前綴。可以通過(guò)在路由路徑中添加冒號(hào)和參數(shù)名來(lái)定義路由參數(shù)。
router := gin.Default() router.GET("/users/:name", func(c *gin.Context) {} router.GET("/users/:id/details", func(c *gin.Context) {}
在上述的例子中,我們定義了兩個(gè)包含路由參數(shù)的動(dòng)態(tài)路由。其中第一個(gè)路由參數(shù)為:name
,第二個(gè)路由參數(shù)為:id
,其能夠被任意的字符串映射,具體如下:
# 下面兩個(gè)URL能夠映射到 /users/:name 路由規(guī)則 GET /users/hello GET /users/world # 下面兩個(gè)URL能夠映射到 /users/:id/details GET /users/123/details GET /users/456/details
同時(shí),Gin
框架還支持用戶(hù)在處理函數(shù)中提取出路由參數(shù)的值。比如/users/hello
URL,匹配的路由規(guī)則為/users/:name
,此時(shí)路由參數(shù)的值為hello
。gin
框架支持在處理函數(shù)中通過(guò)Param
方法取出該值。代碼示例如下:
router := gin.Default() // 路由參數(shù)為:name router.GET("/users/:name", func(c *gin.Context) { // 通過(guò)Context.Param 方法獲取到 動(dòng)態(tài)路由參數(shù) :name 實(shí)際的值 name := c.Param("name") c.JSON(http.StatusOK, gin.H{"name": name}) })
以上便是Gin
框架中路由參數(shù)的基本語(yǔ)法,能夠通過(guò) :
和 參數(shù)名
的組合來(lái)定義路由參數(shù),同時(shí)也支持通過(guò) Param
方法獲取到路由參數(shù)實(shí)際的入?yún)ⅰ?/p>
3.2.2 代碼示例
這里我們回到上面博客網(wǎng)站的例子,此時(shí)我們API
的設(shè)計(jì)采用RESTful
風(fēng)格,一篇文章對(duì)應(yīng)著一個(gè)URL,10w篇文章就有10w個(gè)URL。我們使用Gin
框架提供的路由參數(shù)特性,實(shí)現(xiàn)一個(gè)處理函數(shù)同時(shí)處理10w個(gè)不同URL的請(qǐng)求,代碼示例如下:
package main import ( "github.com/gin-gonic/gin" ) func main() { // 創(chuàng)建一個(gè)gin實(shí)例 r := gin.Default() // 注冊(cè)路由,定義帶參數(shù)的路由 // :articleId 是參數(shù)名,它將用于提取路由參數(shù) r.GET("/article/posts/:articleId", func(c *gin.Context) { // 提取路由參數(shù) id := c.Param("articleId") // 執(zhí)行對(duì)應(yīng)的業(yè)務(wù)邏輯 c.String(200, "Hello, %s!", id) }) r.Run(":8080") }
4. 總結(jié)
本文從RESTful
風(fēng)格 API
出發(fā),通過(guò)舉例說(shuō)明,展示了 RESTful
風(fēng)格API
的設(shè)計(jì),在現(xiàn)代web應(yīng)用程序中展現(xiàn)了一定的流行趨勢(shì)?;诖耍?jiǎn)單推導(dǎo)出我們?cè)谠O(shè)計(jì) API
時(shí),也可以盡量遵循 RESTful
風(fēng)格。
RESTful
風(fēng)格 API
的實(shí)現(xiàn),如果沒(méi)有路由參數(shù)的支持,是很難實(shí)現(xiàn)的,基于此,我們便引入了本文的主題,Gin
框架路由參數(shù)的實(shí)戰(zhàn)。
接下來(lái),主要介紹了什么是路由參數(shù),對(duì)路由參數(shù)的基本特性進(jìn)行了介紹。之后則真正開(kāi)始 Gin
框架中 路由參數(shù)的介紹,包含基本語(yǔ)法和代碼示例。
到此這篇關(guān)于淺析Gin框架中路由參數(shù)的使用的文章就介紹到這了,更多相關(guān)Gin路由參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go實(shí)現(xiàn)快速生成固定長(zhǎng)度的隨機(jī)字符串
這篇文章主要為大家詳細(xì)介紹了怎樣在Go中簡(jiǎn)單快速地生成固定長(zhǎng)度的隨機(jī)字符串,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以學(xué)習(xí)一下2022-10-10golang中struct和[]byte的相互轉(zhuǎn)換示例
這篇文章主要介紹了golang中struct和[]byte的相互轉(zhuǎn)換示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Golang10進(jìn)制轉(zhuǎn)16進(jìn)制的幾種方法代碼示例
這篇文章主要給大家介紹了關(guān)于Golang10進(jìn)制轉(zhuǎn)16進(jìn)制的幾種方法,進(jìn)制轉(zhuǎn)換是Golang的一些基本操作,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07golang?channel多協(xié)程通信常用方法底層原理全面解析
channel?是?goroutine?與?goroutine?之間通信的重要橋梁,借助?channel,我們能很輕易的寫(xiě)出一個(gè)多協(xié)程通信程序,今天,我們就來(lái)看看這個(gè)?channel?的常用用法以及底層原理2023-09-09使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法
go語(yǔ)言web框架挺多的,本文就介紹了一下如何使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12詳解Golang如何優(yōu)雅判斷interface是否為nil
這篇文章主要為大家詳細(xì)介紹了Golang如何優(yōu)雅判斷interface是否為nil的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下2024-01-01Go語(yǔ)言使用slices包輕松實(shí)現(xiàn)排序功能
在 Go 語(yǔ)言開(kāi)發(fā)中,對(duì)數(shù)據(jù)進(jìn)行排序是常見(jiàn)的需求,Go 1.18 版本引入的 slices包提供了簡(jiǎn)潔高效的排序解決方案,支持內(nèi)置類(lèi)型和用戶(hù)自定義類(lèi)型的排序操作,本文將通過(guò)具體示例,詳細(xì)介紹如何使用 slices包實(shí)現(xiàn)排序及相關(guān)功能,需要的朋友可以參考下2025-05-05Golang?中的?strconv?包常用函數(shù)及用法詳解
strconv是Golang中一個(gè)非常常用的包,主要用于字符串和基本數(shù)據(jù)類(lèi)型之間的相互轉(zhuǎn)換,這篇文章主要介紹了Golang中的strconv包,需要的朋友可以參考下2023-06-06golang實(shí)現(xiàn)數(shù)組分割的示例代碼
本文主要介紹了golang實(shí)現(xiàn)數(shù)組分割的示例代碼,要求把數(shù)組分割成多個(gè)正整數(shù)大小的數(shù)組,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12