Go語言目前比較火的web框架有gin、mux等。可是gin、mux等的代碼風格讓不少曾經使用Tornado框架的開發人員感受不適應。這裏給你們帶來了一個新的框架——Tigo框架,讓Python/Tornado轉Go的開發者又多了一條可選擇的道路。python
首先咱們看一下Tornado框架的一個Demo:git
# -*- coding: utf-8 -*-
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, Demo!")
urls = [
(r"/", MainHandler),
]
if __name__ == "__main__":
app = tornado.web.Application(urls)
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
複製代碼
接下來再看一下Tigo的Demo:github
package main
import "github.com/karldoenitz/Tigo/TigoWeb"
type DemoHandler struct {
TigoWeb.BaseHandler
}
func (demoHandler *DemoHandler) Get() {
demoHandler.ResponseAsText("Hello, Demo!")
}
var urls = []TigoWeb.Router{
{"/demo", &DemoHandler{}, nil},
}
func main() {
application := TigoWeb.Application{IPAddress: "0.0.0.0", Port: 8888, UrlRouters: urls}
application.Run()
}
複製代碼
兩者的代碼風格仍是比較相近的。golang
Tigo是一款Go(Golang)語言開發的web應用框架,主要設計靈感來源於Tornado框架,結合了Go自己的一些特性(interface、struct嵌入等)而設計的一個框架。
Tigo框架的首頁:點擊此處
Tigo框架的項目地址:點擊此處
Tigo框架的API文檔:點擊此處
安裝方法:web
go get github.com/karldoenitz/Tigo/...
複製代碼
Tigo主要包含TigoWeb
、request
、binding
、logger
四個包,其中TigoWeb
是Tigo框架的核心包,搭建服務主要依靠此包;request
包是一個httpclient工具包,用來發送http請求;binding
包是用來對json以及form進行校驗的工具包;logger
包則是用來記錄log的工具包。shell
首先來看一下Tigo一個服務所包含的基本代碼塊:Application
、Handler
、UrlRouter
;
一個Application
實例就是一個服務,一個Handler
就是一個Controller,UrlRouter
將url與handler進行綁定。json
咱們寫一個簡單的示例:
定義一個handler,在handler中實現一個get方法,用來響應HTTP的get請求方式;api
import "github.com/karldoenitz/Tigo/TigoWeb"
type DemoHandler struct {
TigoWeb.BaseHandler
}
func (demoHandler *DemoHandler) Get() {
demoHandler.ResponseAsText("Hello, Demo!")
}
複製代碼
接下來寫一個路由映射;bash
var urls = []TigoWeb.Router{
{"/demo", &DemoHandler{}, nil},
}
複製代碼
最後咱們寫一個main方法,初始化一個Application實例,並運行該實例;cookie
func main() {
application := TigoWeb.Application{IPAddress: "0.0.0.0", Port: 8888, UrlRouters: urls}
application.Run()
}
複製代碼
BaseHandler
是全部handler的基類,cookie操做、http header操做、http上下文操做等方法都在此結構體中實現,開發者只要繼承這個handler,就可使用這裏面的方法。
目前binding支持json和form的實例化校驗,後續將推出url參數的實例化校驗。
咱們定義一個結構體UserInfo
,具體以下:
type Person struct {
Name string `json:"name" required:"true"`
Age int `json:"age" required:"true" default:"18"`
Mobile string `json:"mobile" required:"true" regex:"^1([38][0-9]|14[57]|5[^4])\\d{8}$"`
Info string `json:"info" required:"false"`
}
複製代碼
當tag中required
爲true的時候,將會對此字段進行校驗,不然略過;default
表示默認值,當此字段必須,而且json/form中沒有值的時候,就會採用此默認值;regex
則表示正則匹配,若是該字段的值知足正則匹配,則認爲該字段合法,不然校驗失敗。
例如:
// 咱們向服務發送一個json,數據格式以下所示
{
"name": "張三",
"mobile": "13746588129"
}
複製代碼
校驗結果以下:
// 咱們將json校驗以後的結果轉爲json打印出來
{
"name": "張三",
"age": 18,
"mobile": "13746588129",
"info": ""
}
複製代碼
固然,TigoWeb.Basehandler
中封裝了CheckJsonBinding
、CheckFormBinding
、CheckParamBinding
三個內置方法進行json或form的校驗。
request
包是用來發送http請求的工具包,
使用request
包發送http請求很是簡單,若是你使用過Python的requests模塊,那麼Tigo的request
包極易上手。
示例1:
// 發送Post請求示例
import "github.com/karldoenitz/Tigo/request"
func main() {
headers := map[string]string{
"Content-Type": "application/x-www-form-urlencoded",
}
postData := map[string]interface{}{
"chlid": "news_news_bj",
}
response, err := request.Post("https://test.hosts.com/api/get_info_list?cachedCount=0", postData, headers)
if err != nil {
fmt.Println(err.Error())
}
contentStr := response.ToContentStr()
fmt.Println(contentStr)
}
複製代碼
示例2:
// 發送get請求
import "github.com/karldoenitz/Tigo/request"
func main() {
response, err := request.Get("https://demo.host.com/api/detail?id=773947310848622080")
if err != nil {
fmt.Println(err.Error())
}
contentStr := response.ToContentStr()
result := struct {
Code int `json:"code"`
Msg string `json:"msg"`
}{}
json.Unmarshal(response.Content, &result)
fmt.Println(result.Code)
fmt.Println(result.Msg)
fmt.Println(contentStr)
}
複製代碼
logger的模塊的使用很是簡單,能夠經過json文件或者yaml文件配置,示例以下:
{
"cookie": "TencentCode",
"ip": "0.0.0.0",
"port": 8080,
"log": {
"trace": "/Users/karllee/Desktop/trace.log", // 此文件存儲trace跟蹤日誌
"info": "/Users/karllee/Desktop/run-info.log", // 此文件存儲info日誌
"warning": "/Users/karllee/Desktop/run.log", // 將warning和error日誌都寫入run.log
"error": "/Users/karllee/Desktop/run.log",
"time_roll": "H*2" // 每2小時切分一次log日誌
}
}
複製代碼
配置文件寫好以後,只須要在初始化Application
實例的時候指定配置文件地址便可,例如:
application := TigoWeb.Application{
...
ConfigPath: "./configuration.json", // 配置文件的絕對路徑或相對路徑
}
複製代碼
Tigo更詳細的功能及文檔請查看github項目主頁。
Demo能夠點擊此處下載。