Golang ECHO框架入門【1】


一、介紹

echo web框架是go語言開發的一種高性能,可擴展,輕量級的web框架。
echo框架真的非常的簡單,幾行代碼就可以啟動一個高性能的http服務端。

如果你只是測試返回hello world這種簡單邏輯,普通的低配服務器,每秒扛個萬八千QPS沒什么問題,這個主要跟服務器配置有關,當然實際應用中的業務邏輯不會是hello world那么簡單,業務不同,系統設計不同吞吐量肯定不一樣。

echo框架默認其實只包含了MVC框架的C部分,就是負責url路由和控制器部分。至於V視圖部分和M數據操作部分可以隨意使用自己喜歡的工具庫來操作。

二、安裝

安裝echo包

go get github.com/labstack/echo/

三、如何開始一個Http Server。

創建httpserver.go文件,代碼如下:

package main

import (
	"net/http"
	//導入echo包
	"github.com/labstack/echo"
)

func main() {
    //實例化echo對象。
	e := echo.New()
	
	//注冊一個Get請求, 路由地址為: /hello  並且綁定一個控制器函數, 這里使用的是閉包函數。 
	e.GET("/hello", func(c echo.Context) error {
	    //控制器函數直接返回一個字符串,http響應狀態為http.StatusOK,就是200狀態。
		return c.String(http.StatusOK, "hello echo")
	})
	
	//啟動http server, 並監聽8080端口,冒號(:)前面為空的意思就是綁定網卡所有Ip地址,本機支持的所有ip地址都可以訪問。
    e.Start(":8080")
}

運行http server

$ go run httpserver.go

通過瀏覽器訪問 http://localhost:8080/hello 瀏覽器會顯示: hello echo

echo web框架的代碼非常簡潔,就幾行代碼一個http server的主要的初始化工作就搞定了,只要添加自己的業務代碼就行。

四、項目結構

通過上面的例子,知道echo大致是怎么使用的,但是實際項目業務功能會很多,不可能把所有代碼都寫在一個go文件里面或者寫在一個main入口函數里面;需要對項目結構做一些規划,方便維護代碼以及擴展。

echo web框沒有對項目結構做出限制,根據自己項目需要自行設計。

這里給出一個典型的MVC框架大致的項目結構的例子,參考如下:

├── conf                    #項目配置文件目錄
│   └── config.toml         #可以選擇自己熟悉的配置文件管理工具包例如:toml、xml等等
├── controllers             #控制器目錄,按模塊存放控制器,必要的時候可以繼續划分子目錄。
│   ├── food.go
│   └── user.go
├── main.go                 #項目入口,這里負責echo框架的初始化,注冊路由信息,關聯控制器函數等。
├── models                  #模型目錄,負責項目的數據存儲部分,例如各個模塊的Mysql表的讀寫模型。
│   ├── food.go
│   └── user.go
├── static                  #靜態資源目錄,包括Js,css,jpg等等,可以通過echo框架配置,直接讓用戶訪問。
│   ├── css
│   ├── images
│   └── js
├── logs                    #日志文件目錄,主要保存項目運行過程中產生的日志。
└── views                   #視圖模板目錄,存放各個模塊的視圖模板,當然有些項目只有api,是不需要視圖部分,可以忽略這個目錄
    └── index.html

提示:上面給出的項目結構,程序編譯打包后代碼都編譯成一個可執行程序,需要把conf,static, logs目錄一起打包部署,否則程序會找不到配置文件,靜態文件,日志存儲目錄,后面會有專門的教程介紹go項目的打包。

五、路由&控制器

1.路由

echo框架的路由定義如下:

//定義post請求, url為:/users, 綁定saveUser控制器函數
e.POST("/users", saveUser)

//定義get請求,url模式為:/users/:id  (:id是參數,例如: /users/10, 會匹配這個url模式),綁定getUser控制器函數
e.GET("/users/:id", getUser)

//定義put請求
e.PUT("/users/:id", updateUser)

//定義delete請求go
e.DELETE("/users/:id", deleteUser)

2.控制器

在echo框架中,控制器是一個函數,需要根據業務實現各種控制器函數,控制器函數定義如下:

//控制器函數只接受一個echo.Context上下文參數
//參數:c 是上下文參數,關聯了當前請求和響應,通過c參數可以獲取請求參數,向客戶端響應結果。
func HandlerFunc(c echo.Context) error

例子:

// 路由定義:e.GET("/users/:id", getUser)
// getUser控制器函數實現
func getUser(c echo.Context) error {
  	// 獲取url上的path參數,url模式里面定義了參數:id
  	id := c.Param("id")
  	
  	//響應一個字符串,這里直接把id以字符串的形式返回給客戶端。
	return c.String(http.StatusOK, id)
}

六、echo如何獲取請求參數

控制獲取請求參數的例子:

func getUser(c echo.Context) error {
  	// 方式1:獲取url上的path參數,url模式里面定義了參數:id
  	id := c.Param("id")
  	
  	//方式2:獲取query參數,例如:/users?username=tizi365&type=2
  	username := c.QueryParam("username")  //值為:"tizi365"
  	usertype := c.QueryParam("type")      //值為:"2"
  	
  	//方式3:獲取post請求的表單參數
  	username := c.FormValue("username") 
  	usertype := c.FormValue("type") 
  	
  	return c.String(http.StatusOK, "獲取參數例子")
}

七、響應請求

echo框架支持以文本、html、Json、xml多種格式的內容形式響應Http請求。

控制器響應請求的例子:

type User struct {
    Id       int
    Username string
}

func getUser(c echo.Context) error {
    //方式1: 返回字符串
  	//以字符串的形式返回,c.String語法:c.String(http狀態碼,"字符串內容")
  	return c.String(http.StatusOK, "獲取參數例子")
  	
  	//方式2:返回JSON
  	//以json字符串的形式返回結果,c.JSON語法: c.JSON(http狀態碼, 結構體變量)
  	u := User{2, "tizi365"}
  	return c.JSON(http.StatusOK, u) //返回結果:{"id":2,"username":"tizi365"}

    //方式3: 返回HTML
    //以網頁形式返回html代碼,c.HTML語法: c.HTML(http狀態碼, "html內容")
    html := "<html><head><title>tizi365.com</title></head><body>歡迎訪問tizi365.com</body></html>"
    //當然實際項目,不會這樣拼寫html代碼,太麻煩,一會使用模板引擎處理Html代碼,然后把結果通過c.HTML返回給客戶端就行。
    return c.HTML(http.StatusOK, html)

}

八、如何展示靜態內容

對於js、css、png、jpg這些靜態內容,echo框架通過一個配置就可以實現靜態資源的展示。

例子:

e := echo.New()

...忽略其他初始化代碼...

//設置靜態資源url前綴和目錄
//這里設置 /static 為靜態資源url的前綴,當前程序運行目錄下面的static目錄為靜態資源目錄
e.Static("/static", "static")

//例如:static目錄下存在js/index.js文件, 則這個js的url為:/static/js/index.js


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM