Gin 路由與路由文件分組的實(shí)現(xiàn)實(shí)例
路由
路由(Routing)是由一個(gè) URL(或者叫路徑)和一個(gè)特定的 HTTP 方法(GET、POST等)組成的,涉及到應(yīng)用如何響應(yīng)客戶端對(duì)某個(gè)網(wǎng)站節(jié)點(diǎn)的訪問(wèn)。
GET 請(qǐng)求傳值
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// localhost:8080/get?username=zhangsan&password=123
r.GET("/get", func(c *gin.Context) {
// 使用c.Query()獲取請(qǐng)求當(dāng)中的參數(shù)
username := c.Query("username")
password := c.Query("password")
// 當(dāng)請(qǐng)求路徑當(dāng)中沒(méi)有帶有 age 參數(shù)時(shí),使用默認(rèn)值18
age := c.DefaultQuery("age", "18")
c.JSON(http.StatusOK, gin.H{
"msg": "Get...",
"username": username,
"password": password,
"age": age,
})
})
r.Run()
}
使用 Postman 進(jìn)行測(cè)試


動(dòng)態(tài)路由傳值
域名/user/20
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/user/:uid", func(c *gin.Context) {
// 使用c.Param()獲取請(qǐng)求當(dāng)中的參數(shù)
uid := c.Param("uid")
c.JSON(http.StatusOK, gin.H{
"msg": "動(dòng)態(tài)路由傳值...",
"uid": uid,
})
})
r.Run()
}
使用 Postman 進(jìn)行測(cè)試

POST 請(qǐng)求傳值(獲取form表單數(shù)據(jù))
add.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/toAdd" method="post">
用戶名 <input type="text" name="username">
密碼 <input type="password" name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// 配置模板的文件
r.LoadHTMLGlob("templates/*")
// 輸入localhost:8080/add 跳轉(zhuǎn)到add.html頁(yè)面
r.GET("/add", func(c *gin.Context) {
c.HTML(200, "add.html", gin.H{})
})
r.POST("/toAdd", func(c *gin.Context) {
// 使用c.PostForm()獲取請(qǐng)求當(dāng)中的參數(shù)
username := c.PostForm("username")
password := c.PostForm("password")
// 當(dāng)表單當(dāng)中沒(méi)有 age ,使用默認(rèn)值18
age := c.DefaultPostForm("age", "18")
c.JSON(200, gin.H{
"username": username,
"password": password,
"age": age,
})
})
r.Run()
}


簡(jiǎn)單的路由組
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
userRoutes := r.Group("/user")
{
userRoutes.GET("/add", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "userAdd...",
})
})
userRoutes.GET("/edit", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "userEdit...",
})
})
}
adminRoutes := r.Group("/admin")
{
userRoutes.GET("/add", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "adminAdd...",
})
})
userRoutes.GET("/edit", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "adminEdit...",
})
})
}
r.Run()
}
使用 Postman 進(jìn)行測(cè)試

Gin 路由文件分組
在項(xiàng)目的根目錄下新建 routes 文件夾,并新建 go 文件
DefaultRoutes.go
package routes
import "github.com/gin-gonic/gin"
func DefaultRoutesInit(r *gin.Engine) {
defaultRoutes := r.Group("/")
{
defaultRoutes.GET("/", func(c *gin.Context) {
c.String(200, "首頁(yè)")
})
defaultRoutes.GET("/news", func(c *gin.Context) {
c.String(200, "新聞")
})
}
}
AdminRoutes.go
package routes
import "github.com/gin-gonic/gin"
func AdminRoutesInit(r *gin.Engine) {
adminRoutes := r.Group("/admin")
{
adminRoutes.GET("/", func(c *gin.Context) {
c.String(200, "admin...")
})
adminRoutes.GET("/userlist", func(c *gin.Context) {
c.String(200, "admin---userlist")
})
adminRoutes.GET("/plist", func(c *gin.Context) {
c.String(200, "admin---plist")
})
}
}
ApiRoutes.go
package routes
import "github.com/gin-gonic/gin"
func ApiRoutesInit(r *gin.Engine) {
apiRoutes := r.Group("/api")
{
apiRoutes.GET("/", func(c *gin.Context) {
c.String(200, "我是一個(gè)api接口")
})
apiRoutes.GET("/userlist", func(c *gin.Context) {
c.String(200, "我是一個(gè)api接口---userlist")
})
apiRoutes.GET("/plist", func(c *gin.Context) {
c.String(200, "我是一個(gè)api接口---plist")
})
}
}
main.go
package main
import (
"Gin_demo/routes"
"fmt"
"github.com/gin-gonic/gin"
"html/template"
"time"
)
func main() {
r := gin.Default()
// 配置模板的文件
r.LoadHTMLGlob("templates/*")
// 配置靜態(tài)web目錄 第一個(gè)參數(shù)表示路由,第二個(gè)參數(shù)表示映射的路徑.
r.Static("/static", "./static")
routes.DefaultRoutesInit(r)
routes.ApiRoutesInit(r)
routes.AdminRoutesInit(r)
r.Run()
}
到此這篇關(guān)于Gin 路由與路由文件分組的實(shí)現(xiàn)實(shí)例的文章就介紹到這了,更多相關(guān)Gin 路由與路由文件分組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語(yǔ)言reflect.TypeOf()和reflect.Type通過(guò)反射獲取類型信息
這篇文章主要介紹了Go語(yǔ)言reflect.TypeOf()和reflect.Type通過(guò)反射獲取類型信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn)
本文主要介紹了golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
Golang操作DuckDB實(shí)戰(zhàn)案例分享
DuckDB是一個(gè)嵌入式SQL數(shù)據(jù)庫(kù)引擎,它與眾所周知的SQLite非常相似,但它是為olap風(fēng)格的工作負(fù)載設(shè)計(jì)的,DuckDB支持各種數(shù)據(jù)類型和SQL特性,憑借其在以內(nèi)存為中心的環(huán)境中處理高速分析的能力,它迅速受到數(shù)據(jù)科學(xué)家和分析師的歡迎,在這篇博文中,我們將探索在Go中使用DuckDB2025-01-01
詳解Go語(yǔ)言中的數(shù)據(jù)庫(kù)操作
數(shù)據(jù)庫(kù)是應(yīng)用開(kāi)發(fā)中必須要掌握的技巧。這篇文章主要和大家介紹一下Go語(yǔ)言中相關(guān)的數(shù)據(jù)庫(kù)操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-02-02
Golang打印復(fù)雜結(jié)構(gòu)體兩種方法詳解
在?Golang?語(yǔ)言開(kāi)發(fā)中,我們經(jīng)常會(huì)使用結(jié)構(gòu)體類型,如果我們使用的結(jié)構(gòu)體類型的變量包含指針類型的字段,我們?cè)谟涗浫罩镜臅r(shí)候,指針類型的字段的值是指針地址,將會(huì)給我們?debug?代碼造成不便2022-10-10
Web框架Gin中間件實(shí)現(xiàn)原理步驟解析
這篇文章主要為大家介紹了Web框架Gin中間件實(shí)現(xiàn)原理步驟解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Go語(yǔ)言實(shí)現(xiàn)ssh&scp的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Go語(yǔ)言實(shí)現(xiàn)ssh&scp,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2022-10-10
Go語(yǔ)言實(shí)戰(zhàn)學(xué)習(xí)之流程控制詳解
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中的流程控制,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助?,需要的朋友可以參考下2022-08-08
Go語(yǔ)言web快速開(kāi)發(fā)框架Gin的HttpRouter路由的使用
in框架內(nèi)部使用了高性能的路由器庫(kù)httprouter,支持動(dòng)態(tài)參數(shù)匹配和簡(jiǎn)潔的接口,本文主要介紹了Go語(yǔ)言web快速開(kāi)發(fā)框架Gin的HttpRouter路由的使用,感興趣的可以了解一下2025-03-03

