Golang Gin Router HandlerFunc 拆分練習 - 菜鳥工程師肉豬

文章推薦指數: 80 %
投票人數:10人

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 搜尋此網誌 總網頁瀏覽量



請為這篇文章評分?