Beego原始碼解析 四 Hook函式

2021-07-16 10:59:34 字數 2362 閱讀 4044

在前三篇文章中,介紹了 beego作為 web框架最基本的配置解析路由機制請求處理三個流程.現在我們應該就已經對 beego很是了解

後面的文章就讓我們重新頭開始看看除了這三個基本功能外,beego還做了什麼其他的事情吧~

這篇文章會介紹在 beego啟動時呼叫的6個 hook函式

關於 beego原始碼的注釋可以看我的github

回到最開始的 beego.run()函式(beego.go:53)。可以看到在函式的第一行就有乙個

()而且這個函式定義也就在下面緊挨著

}}這裡看到有個 hooks變數,它在本檔案的37行被定義

type hookfunc func() error

var (

hooks = make(hookfunc,0)

)}

在 hooks.go中可以看到他們的身影

這個函式比較短,它只是使用了標準庫的 mime包,向其中新增關聯,這個 mimemaps不出所料也是乙個 map[string][string]型別的map,其中包含了所有對應的關聯資訊.想要了解的可以檢視 mime.go這個檔案

func registermine() error

return

nil}

這個函式也同樣很好理解,它定義了不同出錯碼對應的函式,然後用 errorhandler函式註冊進乙個叫 errormaps的 map[string]*errinfo型別的map中,並在以後用於出錯處理

關於出錯處理的這幾個函式可以參考 error.go檔案,並不是很複雜就不多說了

func registerdefaulterrorhandler() error 

for e, h := range m

}return

nil}

這個函式看名字就知道是關於 session的,它會通過配置檔案判斷是否開啟了 session,並且獲得配置

再然後就通過呼叫 session包裡的 newmanger函式獲得乙個 session管理器的例項,並且使用 goroutine開始乙個gc()來管理 session

這裡的 globalsessions在 config.go:114行被宣告,作用於全域性

關於 seesion管理器可能(額=.=)以後會更新說明

func registersession() error 

confbytes, err := json.marshal(conf)

if err != nil

sessionconfig = string(confbytes)

}if globalsessions, err = session.newmanager(bconfig.webconfig

.session

.sessionprovider, sessionconfig); err != nil

//開啟乙個goroutine來處理session的**,定義於 session.session

.go:227

go globalsessions.gc()

}return nil

}

構建模板的函式,這樣在以後使用模板可以更加方便

關於模板的函式可以看 template.go檔案

以後可能(額=.=)會有關於模板的介紹…

func registertemplate() error 

return err

}return

nil}

beego的自動化文件是否開始,可以看出這裡就只是註冊了兩個路由

關於自動化文件的使用可以看官方文件

func registerdocs() error 

return

nil}

在 beego的文件中都知道有乙個叫程序內監控的功能,如果配置檔案開啟了,那麼這裡就會用 goroutine開啟乙個監控

相關的使用方法可以參考官方文件

也可以參考 beego/admin.go檔案

func registeradmin() error 

return

nil}

如果錯誤,希望指正:d

React原始碼解析 四 react ref

平時我們可能會有這樣的需求,就是需要獲取某個dom節點或者子元件的例項來更新,而並不是只是通過props等來更新dom節點或者元件。如果沒有乙個好的方法我們可能自己去獲取節點 例 queryselector等 或者去繫結事件來進行一些操作,而且自己還要去管理獲取的一些相關的東西,這樣可能會不方便。那...

JDk原始碼解析之四 Vector原始碼解析

具體的三個屬性 解釋看圖中注釋。vector沒有採取arraylist臨界值擴容的辦法,而是每次不夠的時候,直接根據capacity的值來增加。具體怎麼增加後面會說。vector的構造方法如下。簡單粗暴,如果呼叫無參建構函式,直接就將初始容量設定成了10,最終在右側的構造方法裡,將陣列的長度設定為1...

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...