仿Gin搭建自己的web框架 二

2021-09-24 08:44:55 字數 2214 閱讀 3296

本文介紹gin的路由控制。

複製**這條語句通過http.handlefunc函式註冊了對路徑 / 處理的函式handler。看一下它內部的實現

func handlefunc(pattern string, handler func(responsewriter, *request)) 

複製**

可以看到是呼叫了 defaultservemux 的 handlefunc 函式。再看 defaultservemux 的定義:

var defaultservemux servemux

type servemux struct

// defaultservemux is the default servemux used by serve.

var defaultservemux = &defaultservemux

複製**

mu 是讀寫的訊號量,m 是乙個map結構,用來儲存路徑與handler的對應關係。

// handlefunc registers the handler function

for the given pattern.

func (mux *servemux) handlefunc(pattern string, handler func(responsewriter, *request))

mux.handle(pattern, handlerfunc(handler))

}// handle registers the handler for the given pattern.

// if a handler already exists for pattern, handle panics.

func (mux *servemux) handle(pattern string, handler handler)

if handler == nil

if _, exist := mux.m[pattern]; exist

if mux.m == nil

mux.m[pattern] = muxentry

if pattern[0] != '/'

}複製**

從原始碼上可以看到,實際上新增路由資訊的過程先判斷對應的handler是否為空,不為空的話,將對應的路徑和handler新增到servemux.m中。

在處理請求的時候,實際是呼叫了serverhttp的函式:

//省略了一些**

}複製**也就是說,在我們啟動web服務的時候

複製**如果第二個handler引數傳的是nil,就用啟用預設的defaultservemux , 而我們之前已經把對應的路由加到了defaultservemux的map裡邊,來了請求之後直接去map裡邊找對應的關係就行。

換句話說,如果我們要實現自己的路由功能,只需要按照預設的格式定義路由,在啟動的時候,將我們的自定義路由傳入到listenandserve的第二個引數即可。

() 複製**我們首先生成了乙個新的路由服務 httprouter.new(), 然後新增了對於 / 的get請求的處理。啟動的時候把這個router作為第二個引數傳入到listenandserve然後就生效了。

同樣,利用httprouter,我們能夠簡單有效對其他比如post、head等操作提供支援,也能快速的實現路由引數的功能,具體的可以參考httprouter的使用。

跟Gin一塊搭建自己的web框架 三

一種是所有的路由都掛載到根路徑 上邊,舉例說明,如果有乙個登入和登出功能,我們可以這麼來寫 router.get user login loginhandler router.get user logout logouthandler 當然這也是最為直觀和容易理解的方式。另一種是將有共通路徑字首的路...

goland 搭建 gin 框架的步驟詳解

位址 後,雙擊安裝即可。這裡需要配置2個www.cppcns.com系統變數,乙個是goroot,乙個是gopath 注意 goroot和gopath不能在同一路徑下,且變數名必須是goroot和gopath.位址 https 後,直接雙擊安裝即可。cmd視窗中,執行go get命令時,必須要有gi...

go開源web框架gin的簡單使用

部落格結構體 字段首字母必須大寫,否則gin不能獲取到值返回給前端 json name 配置轉json時字段的名字 type blog struct var bloglist blog func initbloglist bloglist bloglist,blog bloglist bloglis...