Новый билет для веб-разработчиков с python на переход — фреймворк Tigo

Go
Новый билет для веб-разработчиков с python на переход — фреймворк Tigo

введение

Самыми популярными веб-фреймворками на языке 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 или формы.

Использование пакета запроса

requestpackage — это набор инструментов для отправки 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 см.домашняя страница проекта на гитхабе.
Демо можеткликните сюдаскачать.