本文介紹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...