gin框架注冊struct路由


Ginrest的簡單實用

ginrest是我寫的一個關於gin框架的輔助插件,它可以幫助你在開發中省去一些冗余的步驟

安裝

go get github.com/Ivy1996-encode/ginrest

原生gin中使用

package main

import (
	"github.com/Ivy1996-encode/ginrest"
	"github.com/gin-gonic/gin"
	"net/http"
)

type User struct{}

func (*User) Get(c *gin.Context) {
	c.JSON(http.StatusOK, "user list")
}

func (*User) Post(c *gin.Context) {
	c.JSON(http.StatusOK, "user list")
}

func main() {
	server := gin.Default()
	server.Any("/user", ginrest.AsMethodHandlerFunc(new(User)))

	server.Run()
}

使用gin原生的路由注冊方式,使用ginrest.AsMethodHandlerFunc將我們的結構體注冊進去,它回去根據請求方法的名稱去匹配對應的handler,這樣就可以不用寫多個路由去匹配不同的請求方式了。

但是這種寫法會生成多余的路由。

使用router

package main

import (
	"github.com/Ivy1996-encode/ginrest"
	"github.com/gin-gonic/gin"
	"net/http"
)

type User struct{}

func (*User) Get(c *gin.Context) {
	c.JSON(http.StatusOK, "user list")
}

func (*User) Post(c *gin.Context) {
	c.JSON(http.StatusOK, "user list")
}

func main() {
	server := ginrest.Default()

	router := ginrest.Router(server, ginrest.MethodsActions)

	router.Register("/user", new(User))

	server.Run()
}

使用ginrest提供的路由來為我們注冊對於的handler,路由接受兩個參數,第一個是我們的默認的*gin.Engine指針對象,第二個是一個匹配規則。這里默認的是根據請求方法的名字來匹配規則,使用這種注冊不會產生多余的路由。你可以重寫注冊的structGetActions方法來覆蓋默認的匹配規則。

使用RestRouter

package main

import (
	"github.com/Ivy1996-encode/ginrest"
	"github.com/gin-gonic/gin"
	"net/http"
)

type User struct{}

func (*User) List(context *gin.Context) {
	context.JSON(http.StatusOK, "user list")
}

func (*User) Retrieve(context *gin.Context) {
	context.JSON(http.StatusOK, "user detail")
}

func main() {
	server := ginrest.Default()
	router := ginrest.RestRouter(server)
	router.Register("/user", new(User))
	server.Run()
}

RestRouterRouter的進階版本, 它可以自動的根據事先定義好的方法去注冊對應的路由,並且支持對象級路由,如上的例子對象的路由為

[GIN-debug] GET    /user                     --> reflect.methodValueCall (4 handlers)
[GIN-debug] POST   /user                     --> reflect.methodValueCall (4 handlers)

如果你使用過djangorestframework,你會很輕松的理解這個路由匹配方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM