Golang Gin Router HandlerFunc 拆分練習 - 菜鳥工程師肉豬
文章推薦指數: 80 %
Go Gin 把Router處理請求的 HandlerFunc 拆分為另外的檔案。
... DemoRoute 角色類似Java Spring Boot的Controller,用來設定API路徑 /employee/:id ...
AdSense
網頁
首頁
關於我
2021/8/5
GolangGinRouterHandlerFunc拆分練習
GoGin把Router處理請求的HandlerFunc拆分為另外的檔案。
本篇是做GinRouter與處理請求的HandlerFunc的拆分練習,簡單說就是類似做MVC架構那樣。
範例
範例環境:
Go1.16
Gin1.7.2
目錄結構:
/
├─main.go
├─handler/
│└─employeehandler.go
├─model/
│└─employee.go
├─route/
│└─demoroute.go
│
├─go.mod
└─go.sum
Employee為一個簡單的struct型別,類似JavaSpringBoot的model/dto/vo。
model/employee.go
packagemodel
typeEmployeestruct{
Idint
Namestring
Ageint
}
main()為主程式進入點。
初始化ginEngine,設定Router群組路徑/demo並啟動engine。
main.go
packagemain
import(
"abc.com/demo/route"
"github.com/gin-gonic/gin"
)
funcmain(){
router:=gin.Default()
group:=router.Group("/demo")
route.NewDemoRoute(group).Route()
router.Run(":8080")
}
DemoRoute角色類似JavaSpringBoot的Controller,用來設定API路徑/employee/:id及負責處理請求的HandlerFunc函式。
route/demoroute.go
packageroute
import(
"abc.com/demo/handler"
"github.com/gin-gonic/gin"
)
typeDemoRoutestruct{
*gin.RouterGroup
employeeHandler*handler.EmployeeHandler
}
funcNewDemoRoute(group*gin.RouterGroup)*DemoRoute{
return&DemoRoute{
group,
handler.NewEmployeeHandler(),
}
}
func(route*DemoRoute)Route(){
route.GET("/employee/:id",route.employeeHandler.GetEmployeeById())
}
EmployeeHandler角色類似JavaSpringBoot的Service,GetEmployeeById()即為Router的函式型別HandlerFunc的實作,用來處理/empployee/:id送來的請求,函式會帶入Context參數。
裡面設定一個假的裝有Employee的map,會依請求的路徑參數(pathparameters)id取得對應的Employee.Name。
handler/employeehandler.go
packagehandler
import(
"log"
"strconv"
"abc.com/demo/model"
"github.com/gin-gonic/gin"
)
typeEmployeeHandlerstruct{
}
funcNewEmployeeHandler()*EmployeeHandler{
return&EmployeeHandler{}
}
func(h*EmployeeHandler)GetEmployeeById()gin.HandlerFunc{
m:=map[int]model.Employee{
1:{Id:1,Name:"John",Age:33},
2:{Id:2,Name:"Mary",Age:28},
}
returnfunc(c*gin.Context){
id,_:=strconv.Atoi(c.Param("id"))
log.Printf("id=%d\n",id)
name:=m[id].Name
c.JSON(200,gin.H{
"name":name,
})
}
}
參考github。
測試
啟動專案以cURL測試如下。
$curl"http://localhost:8080/demo/employee/1"
{"name":"John"}
$curl"http://localhost:8080/demo/employee/2"
{"name":"Mary"}
GolangGinGroupingroutes範例
GolangGinWebFrameworkhelloworld範例
GolangGinRoutermiddleware簡介
標籤:
gin
沒有留言:
張貼留言
較新的文章
較舊的文章
首頁
訂閱:
張貼留言(Atom)
AdSense
搜尋此網誌
總網頁瀏覽量
延伸文章資訊
- 1gin controller 自动注册 - 简书
反射入门可以先看这个http://colobu.com/2015/09/23/laws-of-goang-reflection/ 因为在使用gin框架,在配置路由的时候需要手...
- 2toutGin: golang gin框架个人风格版 - Gitee
package controller import ( "github.com/gin-gonic/gin" "toutGin/app/common" "toutGin/app/service"...
- 3gin+gorm+router 快速搭建crud restful API 接口| Go 技术论坛
根据上一篇"gorm基础"封装crud api接口下载扩展go get github.com/go-sql-driver/mysql go get github.com/jinzhu/gorm ...
- 4go系列之一:gin+gorm開發一個簡單的熱榜介面站 - IT人
controller: 控制器,負責接收引數、驗證引數,呼叫service,統一輸出 ... package controller import ( "fmt" "github.com/gin-...
- 5使用gin封装一个web脚手架(一):控制器和路由 - 掘金
创建一个go项目,名称为myGin go.mod文件为安装gin 创建一个main.go文件创建routes文件夹和controller 项目结构为在controller下创建一个Index控制.