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