Go Echo Web 框架

Echo是Go語言生態里的一個Web應用框架,這個框架提供了非常非常簡單的方式來開發高性能的Web應用。其實在寫Echo之前,還想說一說Go語言里一個非常有意思的東西,叫Reflect(反射)的特性,這個特性在動態語言中非常有用,可以類比Objective-C中提供的runtime機制,用來動態的執行Method或者設置屬性,而且reflect的使用非常的簡單。reflect.TypeOf和reflect.ValueOf來分別表示一個值的類型和一個類型的值,并且通過這樣的方式來動態的調用某些方法和設置屬性。

type NotknownType struct {
    s1, s2, s3 string
}

func (n NotknownType) String() string { 
    return n.s1 + " - " + n.s2 + " - " + n.s3
}

func main(){        
    var secret interface{} = NotknownType{"ada", "go", "obrer"}        
    value := reflect.ValueOf(secret)
    fmt.Println(value)  
    knd := value.Kind()
    fmt.Println(knd)    
    for i := 0; i < value.NumField(); i++ {
    fmt.Println("Field %d: %v\n", i, value.Field(i))
    }   
    results := value.Method(0).Call(nil)
    fmt.Println(results)
}

如果使用ValueOf那么可以用Kind方法來獲取類型,并且設置值用Field,調用方法用Method,這都非常的方便。

好了,言歸正傳,我們來看一看Echo Web Framework,這個用來開發Web應用的框架,到底如何。如果你接觸過Express或者Koa,應該了解整套中間件的機制,而Echo Web Framework正好也提供了這樣的一套機制,在形式上(拋開語法不談)Koa的開發者能很順利的切換到Echo上。

  • 優化的 HTTP 路由。

  • 創建可靠并可伸縮的RESTful API。

  • 行于標準的HTTP服務器或FastHTTP服務器。

  • 組 APIs.

  • 可擴展的middleware框架。

  • Define middleware at root, group or route level.

  • 為JSON, XML進行數據綁定,產生負荷。

  • 提供便捷的方法來發送各種HTTP相應。

  • 對HTTP錯誤進行集中處理。

  • Template rendering with any template engine.

  • 定義屬于你的日志格式。

  • 高度個性化。

上述的List是通過官網文檔翻譯而來,你可以看到Echo Web Framework提供了什么樣的功能。

(準備好F墻的工具),使用go get github/labstack/echo 命令來安裝echo框架,你可以在~/go/pkg/darwin_amd64/** 目錄中查看到已經安裝好的echo,這里的目錄結構,可能在不同的機器中不一樣。(我的是Mac)

// main.go
package main

import (    
    "net/http"    
    "github.com/labstack/echo"    
    "github.com/labstack/echo/engine/standard"
)

func main() {   
    e := echo.New()
    e.GET("/", func(c echo.Context) error {     
        return c.String(http.StatusOK, "Hello, World!")
    })
    e.Run(standard.New(":1323"))
}

運行 go run main.go,這是你就能通過http://127.0.0.1:1323來訪問頁面。這是一個很簡單的Hello World的例子,但是從這個例子中,可以很直觀的感受到,定義路由,啟動方法,幾乎都是類似的。如果你用了Koa,其實也是這樣來定義路由,在Echo中也可以支持動態路由的配置,如e.GET("/i/:id", func( c echo.Context) error { // do }) ,至于其他的一些方式,可能感覺比Koa封裝的更方便,如果你要獲取GET的參數,可以使用c.QueryParam。如果你要獲取表單參數,可以使用c.FormValue。如果你要獲取multipart/form-data類型的數據(一般文件上傳),可以使用c.FormFile。至于處理請求,就更方便了,直接在struct里使用bind data的特性來完成就好,返回的類型,也有很方便的方法給你使用,如:c.JSON,c.XML等。 Context機制,幾乎是所有Web框架的一大特點,一個Context描述了一個請求的生命周期,從request到response一個完整的鏈條,很明顯的出現在你的視野中。幾乎跟HTTP有關的內容,都可以在Context中找到對于的方法來解析對于的內容。

Echo也提供了和Koa一樣的中間件流程,幾乎注冊的方法都一樣(關于中間件概念,如果不清楚,那就要好好去看一下了)。

package main

import (    
    "fmt"    
    "io"    
    "os"    
    "net/http"    
    "github.com/labstack/echo"    
    "github.com/labstack/echo/middleware"
)
func main() {   
    e := echo.New()
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())
    e.Static("/", "public")
    e.POST("/upload", upload)
    e.Logger.Fatal(e.Start(":1323"))
}

這個例子是一個很簡單的處理上傳文件的服務,提供了日志打印的功能,使用.Use來注冊中間件。剩下的,很多都是業務開發了,不過在此之外,還有一些東西還需要完善,畢竟做開發嘛,能用工具解決的問題,提升的效率,盡量使用 shell ci 等方式來解決,如:開發階段能每次編寫完代碼,編輯器save的時候能自動重啟,git push時能自動重新部署等等,這些對于整個開發的生命周期內效率的提升,還是幫助蠻大的,還有一個就是調試。

來自:https://mp.weixin.qq.com/s/BlyQvkw84dBhs4mX_SB5DQ

 

 本文由用戶 FilomenaMut 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!