Go語言Echo Web框架2-路由

Go語言Echo Web框架1-簡單HelloWorld 我們實現了一個Hello world的demo。這節我們將學習echo框架的路由。

Echo的路由器基於radix樹,使路由查詢非常快。它利用同步池 來重用記憶體並實現零動態記憶體分配,而沒有GC開銷。radix樹最廣泛的用途是用於linux的記憶體管理,結構address_space透過radix樹跟蹤繫結到其上的所有對映到記憶體中的頁,有興趣的話,可以深入研究下radix樹。

Go語言Echo Web框架2-路由

radix tree

可以透過指定HTTP方法,路徑和匹配的處理程式來註冊路由。例如,第一節中demo中的為method GET,path /和傳送Hello, World!,HTTP響應的處理程式註冊了一條路由。

// 操作Handlerfunc hello(c echo。Context) error { return c。String(http。StatusOK, “Hello, World!”)}// 路由e。GET(“/”, hello)

1.任意搭配

如果熟悉正則表示式,*可以匹配任何字元,此處也是一樣。匹配路徑中的零個或多個字元。例如,模式/product/*將匹配:

/product/

/product/1

/product/1/price/1

/product/anything。。。

2.路徑匹配順序

靜態的路由,優先匹配

引數路由,其次匹配

匹配任何,最後匹配

例如下面的例子:

// 匹配任何e。GET(“/product/1/price/*”, func(c echo。Context) error { return c。String(http。StatusOK, “product 1 price all”)})// 引數路由e。GET(“/product/:id”, func(c echo。Context) error { return c。String(http。StatusOK, “product get by id”)})//靜態路由e。GET(“/product/new”, func(c echo。Context) error { return c。String(http。StatusOK, “new product”)})

以上路線將按以下順序解決

/product/new

/product/:id

/product/1/price/*

路由可以以任何順序寫入。

3.路由分組

3。1中介軟體

可以將具有公共字首的路由進行分組,以定義帶有可選中介軟體的新的路由器。除指定的中介軟體組外,還繼承了父中介軟體。要稍後在組中新增中介軟體,可以使用Group。Use(m 。。。Middleware)。組也可以巢狀。

在下面的程式碼中,我們建立一個admin組,它需要對routes進行基本的HTTP jwtToken驗證/admin/*。

g := e。Group(“/admin”)g。Use(middleware。BasicAuth(func(jwtToken string, c echo。Context) (bool, error) { if jwtToken == “foo” { return true, nil } return false, nil}))

上面的程式碼表示:當匹配路徑/admin/*下任何路由後,都會經過此中介軟體判斷使用者名稱jwt token是否等於foo。

3。2 子路由

我們也可以使用group將一類具有字首相同的路由放到一起。例如/api/user,/api/score路徑。

r := e。Group(“/api”) r。GET(“/user”, userHandler) r。GET(“/score”, scoreHandler)

4.路由方法

每個路由都包含HTTP方法,路徑和關聯的處理程式,比如常使用的get,post。echo支援put和delete。

例如:

// Handlersfunc createProduct(c echo。Context) error {}func findProduct(c echo。Context) error {}func updateProduct(c echo。Context) error {}func deleteProduct(c echo。Context) error {}// Routese。POST(“/products”, createProduct)e。GET(“/products”, findProduct)e。PUT(“/products”, updateProduct)e。DELETE(“/products”, deleteProduct)

使用以下程式碼,您可以將所有路由輸出到JSON檔案:

data, err := json。MarshalIndent(e。Routes(), “”, “ ”)if err != nil { return err}ioutil。WriteFile(“routes。json”, data, 0644)

我們可以在json檔案的基礎上,編寫我們的API檔案。

對應影片演示:Go語言Echo Web框架2_影片_路由

下一節:Go語言Echo Web框架3-Request請求