分組控制(group control)是 web 框架應提供的基礎功能之一。所謂分組,是指路由的分組。如果沒有路由分組,我們需要針對每乙個路由進行控制。但是真實的業務場景中,往往某一組路由需要相似的處理。例如:
大部分情況下的路由分組,是以相同的字首來區分的。因此,我們今天實現的分組控制也是以字首來區分,並且支援分組的巢狀。例如/post
是乙個分組,/post/a
和/post/b
可以是該分組下的子分組。作用在/post
分組上的中介軟體(middleware),也都會作用在子分組,子分組還可以應用自己特有的中介軟體。
中介軟體可以給框架提供無限的擴充套件能力,應用在分組上,可以使得分組控制的收益更為明顯,而不是共享相同的路由字首這麼簡單。例如/admin
的分組,可以應用鑑權中介軟體;/
分組應用日誌中介軟體,/
是預設的最頂層的分組,也就意味著給所有的路由,即整個框架增加了記錄日誌的能力。
乙個分組group應當所具備的屬性:1.字首,即知道該路由節點的父節點是誰,2.中介軟體,中介軟體極大增強了擴充套件能力(下章節寫)3.巢狀父節點 4.引擎物件
type routergroup struct接下來,將原本engine物件的方法教給routergroup
func (group *routergroup)group(nowurl string)*routergroupreturn newgroup}//新增路由
//gin原始碼的影子
func (group *routergroup)addroute(method string,nowurl string,handler handlerfunc)
func (group *routergroup)get(pattern string,handler handlerfunc)
func (group *routergroup)post(pattern string,handler handlerfunc)
修改engine的建立方法和屬性:
type engine struct//核心建立方法func new()*engineengine.routergroup = &routergroupengine.groups = *routergroup
return engine
}在這裡要注意的是,routergroup物件與engine物件其實是相當於django中的雙向繫結,這樣一來並不需要修改router當中的內容,可以通過兩個物件間的相互呼叫實現功能
測試:
func main())group1 := r.group("/group1")group1.get("/hello", func(context *finto.context) )group2 := r.group("/group2")
group2.get("/hello", func(context *finto.context) )
r.run(":9999")
}
在瀏覽器中可以看到測試結果
心得:1.engine和routergroup互相巢狀,相當於j**a/python中的繼承,這樣一來他們互相都擁有了對方的屬性和方法
2.將routergroup實現engine中的get,post方法,這樣可以讓engine的抽象程度更高。
第三章 流程控制
流程控制結構 這就是語法了 1 了解流程控制語句 實現對程式的執行流程進行控制的一種語句。包括 順序結構 選擇結構 迴圈結構 是否有選擇結構 迴圈結構可以稱為是界定一種語言是否是程式語言的標準。順序流程 順序 程式預設就是這種流程語句,自上而下挨個執行。選擇結構 又稱為分支 轉向 多種條件情況,對應...
第三章控制語句上
條件語句可以給定乙個判斷條件,並在程式執行過程中判斷該條件是否成立。程式根據判斷結果執行不同的操作,這樣就可以改變 的執行順序,從而實現更多功能。1 if語句 if語句用於在程式中有條件的執行某些語句,其語法格式如下 if 條件表示式 語句塊 當條件表示式的值為true,執行語句塊 如果條件表示式的...
第三章控制語句下
1 while語句 迴圈的意思就是讓程式重複地執行某些語句。在實際應用中,當碰到需要多次重複地執行乙個或多個任務時,可考慮使用迴圈語句來解決。迴圈語句的特點是在給定條件成立時,重複執行某個程式段。通常稱給定條件為迴圈條件,稱反覆執行的程式段為迴圈體。在while語句中,當條件表示式為true時,就重...