[概述]
dotweb.go是dotweb的入口類,它提供了dotweb實例的創建、配置及管理。它封裝了dotweb對象,并提供了異常處理、緩存配置等函數。
[索引]
常量
type Dotweb
func New()
func (app *DotWeb) RegisterMiddlewareFunc(name string, middleFunc MiddlewareFunc)
[常量]
``
const(
DefaultHTTPPort //默認的端口號,值為8080
RunMode_Development = "development"
RunMode_Production = "production"
)
``
[type Dotweb]
~~~
type (
DotWeb struct {
HttpServer *HttpServer //server對象
cache cache.Cache //cache對象
OfflineServer servers.Server
Config *config.Config //config對象
Middlewares []Middleware //中間件
ExceptionHandler ExceptionHandle //異常處理
NotFoundHandler StandardHandle // NotFoundHandler 支持自定義404處理代碼能力
MethodNotAllowedHandler StandardHandle // 處理未允許Method提交的請求
AppContext *core.ItemContext //請求級的上下文域
middlewareMap map[string]MiddlewareFunc
middlewareMutex *sync.RWMutex
}
// ExceptionHandle 支持自定義異常處理代碼能力
ExceptionHandle func(Context, error)
// StandardHandle 標準處理函數,需傳入Context參數
StandardHandle func(Context)
// Handle is a function that can be registered to a route to handle HTTP
// requests. Like http.HandlerFunc, but has a special parameter Context contain all request and response data.
HttpHandle func(Context) error
)
~~~
[func New()]
``
app := dotweb.New()
``
獲取一個新的dotweb對象。
[func (app *DotWeb) RegisterMiddlewareFunc(name string, middleFunc MiddlewareFunc)]
``
app := dotweb.New()
app.RegisterMiddlewareFunc("jwt", jwt.Middleware(jwt.DefaultJWTConfig)
``
注冊一個名為“jwt”的中間件,關于中間件請訪問[middleware](https://github.com/devfeel/middleware)。
[func (app *Dotweb) GetMiddlewareFunc]
~~~
app := dotweb.New()
m, e := app.GetMiddlewareFunc("jwt")//若中間件存在e為true,若不存在則為false,m為nil值。
~~~
根據name獲取中間件函數。
[func (app *Dotweb) Cache]
~~~
app := dotweb.New()
c := app.Cache()
~~~
獲取Cache緩存對象。
[func (app *Dotweb) SetCache]
~~~
app := dotweb.New()
app.SetCache(cache.NewRuntimeCache())//使用本機內存緩存
~~~
設置緩存方式,dotweb默認提供Runtime和Redis兩種方式,可以自行擴展別的方式。
[func (app *DotWeb) RunMode(]
~~~
app := dotweb.New()
app.RunMode()//development
~~~
獲取dotweb運行模式,具有development以及production兩種模式。前者表示開發模式,后者表示生產模式,開發模式會打印詳細的異常信息。
[func (app *DotWeb) IsDevelopmentMode]
~~~
app := dotweb.New()
app.IsDevelopmentMode()//true
~~~
判斷運行模式是否是開發模式,dotweb默認值是開發模式。
[func (app *DotWeb) SetDevelopmentMode]
~~~
app := dotweb.New()
app.SetDevelopmentMode()
~~~
將dotweb運行模式設置為development(開發模式),大部分情況下你不用使用此設置,因為它是默認設置。
[func (app *DotWeb) SetProductionMode]
~~~
app := dotweb.New()
app.SetProductionMode()
~~~
將dotweb運行模式設置為production(生產模式)。
[func (app *DotWeb) Use]
~~~
app := dotweb.New()
m := &[5]Middleware
app.Use(m)
~~~
注冊中間件。需要注意的是它接收一個可變長度參數,注意這個“可變參數”在代碼中表示“...”,由于翻譯問題也有叫它多變參數的,它們表示的是同一個意思。
[func (app *DotWeb) UseRequestLog]
~~~
app := dotweb.New()
app.UseRequestLog()
~~~
使用dotweb提供的Requestlog中間件。
[func (app *DotWeb) SetExceptionHandle]
~~~
func ExceptionHandler(c dotweb.Context, e error){//...}
app := dotweb.New()
app.SetExceptionHandle(ExceptionHandler)
~~~
設置異常處理程序。
[func (app *DotWeb) SetNotFoundHandle]
~~~
func NotFoundHandler(c dotweb.Context){//...}
app := dotweb.New()
app.SetNotFoundHandle(NotFoundHandler)
~~~
設置404處理程序。
[func (app *DotWeb) SetMethodNotAllowedHandle]
~~~
func MethodNotAllowedHandler(c dotweb.Context){//...}
app := dotweb.New()
app.SetMethodNotAllowedHandle(MethodNotAllowedHandler)
~~~
設置被禁用的請求方法請求處理,比如一個請求只允許Post請求方法,如果用Get方法請求則被視為違規請求,此請求將被MethodNotAllowedHandle處理。
[func (app *DotWeb) SetPProfConfig]
~~~
app := dotweb.New()
app.SetPProfConfig(true, 8050)
~~~
設置是否啟用PProf并設置端口號,默認是禁用狀態。我們使用PProf服務來查詢dotweb狀態。
[func (app *DotWeb) SetLogger]
~~~
app := dotweb.New()
app.SetEnabledLog(true)//是否啟用日志
app.SetLogPath(file.GetCurrentDirectory())//設置日志目錄,GetCurrentDirectory表示獲取當前項目目錄
app.SetLogger(logger.Logger())
~~~
設置日志處理對象,dotweb默認提供logger.AppLog。
[func (app *DotWeb) SetConfig]
~~~
app := dotweb.New()
app.InitConfig(file.GetCurrentDirectory() + "/dotweb.json.conf", "json")
~~~
加載dotweb配置,dotweb配置可以通過代碼設置之外還可以通過配置文件加載的方式。dotweb支持xml文件和json文件加載,一個dotweb實例只能使用一種文件配置方式,詳細請參考[dotweb-Config](https://github.com/devfeel/dotweb-example/tree/master/config)或是閱讀dotweb源碼。
[func (app *DotWeb) StartServer]
~~~
app := dotweb.New()
app.StartServer(8080)
~~~
啟動dotweb服務,并設置端口號。
[func (app *DotWeb) Start]
~~~
app := dotweb.New()
app.Start()
~~~
啟動dotweb服務,它和StartServer區別是:你加載config文件之后直接啟動服務,只需要在config文件里設置好一切配置。如果未設定端口號,它將使用dotweb默認端口號。
[func (app *DotWeb) MustStart]
~~~
app := dotweb.New()
app.MustStart()
~~~
仍然是啟動dotweb服務,它調用Start函數。與Start不同的是,如果在啟動時出現了配置錯誤會引發Panic。
[func (app *DotWeb) ListenAndServe]
~~~
app := dotweb.New()
app.ListenAndServe(8080)//8080是端口號
~~~
還是啟動dotweb服務,不過ListenAndServer只會啟動dotweb服務不會啟動pprof服務。
[func (app *DotWeb) DefaultHTTPErrorHandler]
[func (app *DotWeb) DefaultNotFoundHandler]
[func (app *DotWeb) DefaultMethodNotAllowedHandler]
以上三個函數是dotweb提供的默認處理程序,針對SetExceptionHandle、SetNotFoundHandle、SetMethodNotAllowedHandle三個異常處理程序。
[func (app *DotWeb) Close]
~~~
app := dotweb.New()
app.Close()
~~~
立即關閉并停止dotweb服務。
[func (app *DotWeb) Shutdown]
~~~
app := dotweb.New()
app.Shutdown(app.HttpServer.pool.context.Get().(HttpContext).context)
~~~
關閉并停止dotweb服務,與Close立即停止服務不同的是,Shutdown會等待活動連接停止活動后關機。詳細可查詢Shutdown與Close的區別。