введение
Самыми популярными веб-фреймворками на языке Go являются gin, mux и др. Однако стиль кода gin, mux и т. д. заставляет многих разработчиков, использовавших фреймворк Tornado, чувствовать себя некомфортно. Здесь мы представляем вам новый фреймворк, фреймворк Tigo, который дает разработчикам Python/Tornado to Go дополнительный путь на выбор.
Во-первых, давайте посмотрим на демонстрацию фреймворка Tornado:
# -*- 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:
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()
}
Стили кода этих двух относительно похожи.
Основная информация и установка Tigo
Tigo — это фреймворк для веб-приложений, разработанный на языке Go (Golang).Основное вдохновение для дизайна исходит от фреймворка Tornado.Это фреймворк, разработанный путем объединения некоторых функций самого Go (интерфейс, встраивание структур и т. д.).
Домашняя страница фреймворка Tigo:кликните сюда
Адрес проекта фреймворка Tigo:кликните сюда
Документация по API фреймворка Tigo:кликните сюда
способ установки:
go get github.com/karldoenitz/Tigo/...
Тиго в основном содержитTigoWeb
,request
,binding
,logger
четыре упаковки из которыхTigoWeb
Это основной пакет фреймворка Tigo, и служба строительства в основном полагается на этот пакет;request
Пакет представляет собой набор инструментов httpclient для отправки http-запросов;binding
Пакет — это набор инструментов, используемый для проверки json и формы;logger
Пакет — это набор инструментов для ведения журнала.
Введение в набор инструментов Tigo
Использование пакета TigoWeb
Во-первых, давайте взглянем на основные блоки кода, содержащиеся в сервисе в Tigo:Application
,Handler
,UrlRouter
;
ОдинApplication
Экземпляр — это сервис,Handler
является контролером,UrlRouter
Привязать URL к обработчику.
Сервисное строительство
Напишем простой пример:
Определите обработчик и реализуйте метод get в обработчике для ответа на метод HTTP-запроса get;
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()
}
BaseHandler
BaseHandler
Это базовый класс всех обработчиков. В этой структуре реализованы такие методы, как операция cookie, операция заголовка http и операция контекста http. Разработчики могут использовать эти методы, если они наследуют этот обработчик.
Использование пакета привязки
В настоящее время привязка поддерживает проверку инстанциации json и формы, а проверка инстанциации параметров URL будет введена в будущем.
Проверка json и формы
Мы определяем структуру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"`
}
когда тегrequired
При значении true это поле будет проверено, в противном случае оно будет пропущено;default
Указывает значение по умолчанию. Если это поле является обязательным и в json/form нет значения, будет использоваться это значение по умолчанию;regex
Это означает регулярное сопоставление.Если значение поля удовлетворяет регулярному сопоставлению, поле считается допустимым, в противном случае проверка не выполняется.
Например:
// 我们向服务发送一个json,数据格式如下所示
{
"name": "张三",
"mobile": "13746588129"
}
Результаты проверки следующие:
// 我们将json校验之后的结果转为json打印出来
{
"name": "张三",
"age": 18,
"mobile": "13746588129",
"info": ""
}
Конечно,TigoWeb.Basehandler
упаковано вCheckJsonBinding
,CheckFormBinding
,CheckParamBinding
Три встроенных метода для проверки json или формы.
Использование пакета запроса
request
package — это набор инструментов для отправки http-запросов,
отправить http-запрос
использоватьrequest
Пакет отправляет http-запросы очень просто, если вы использовали модуль запросов Python, то модуль Tigorequest
Пакет очень прост в использовании.
Пример 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
Использование модуля 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 см.домашняя страница проекта на гитхабе.
Демо можеткликните сюдаскачать.