1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/thinkgo-thinkgo

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ThinkGo

ThinkGo — это легковесный MVC-фреймворк, написанный на Go (Golang).


Установка

Единственное требование — наличие языка программирования Go.

go get -u github.com/forgoer/thinkgo

Быстрый старт

package main

import (
    "fmt"

    "github.com/forgoer/thinkgo"    
    "github.com/forgoer/thinkgo/think"
)

func main() {
    th := thinkgo.New()
    th.RegisterRoute(func(route *think.Route) {

        route.Get("/", func(req *think.Req) *think.Res {
            return think.Text("Hello ThinkGo !")
        })

        route.Get("/ping", func(req *think.Req) *think.Res {
            return think.Json(map[string]string{
                "message": "pong",
            })
        })

        // Dependency injection
        route.Get("/user/{name}", func(req *think.Req, name string) *think.Res {
            return think.Text(fmt.Sprintf("Hello %s !", name))
        })
    })
    // listen and serve on 0.0.0.0:9011
    th.Run()
}

Особенности

  • Маршрутизация.
  • Промежуточное ПО.
  • Контроллер.
  • HTTP-запрос.
  • Ответ HTTP.
  • Представление.
  • Сеанс HTTP.
  • Логирование.
  • Кэширование.
  • ORM.

Маршрутизация

Базовая маршрутизация

Самые простые маршруты принимают URI и замыкание, предоставляя очень простой и выразительный способ определения маршрутов:

think.RegisterRoute(func(route *router.Route) {
    route.Get("/foo", func(req *context.Request) *context.Response {
        return thinkgo.Text("Hello ThinkGo !")
    })
})

Доступные методы маршрутизатора

Маршрутизатор позволяет регистрировать маршруты, которые отвечают на любой HTTP-метод:

route.Get("/someGet", getting)
route.Post("/somePost", posting)
route.Put("/somePut", putting)
route.Delete("/someDelete", deleting)
route.Patch("/somePatch", patching)
route.Options("/someOptions", options)

Иногда вам может потребоваться зарегистрировать маршрут, который отвечает на несколько HTTP-методов. Вы даже можете зарегистрировать маршрут, который отвечает на все HTTP-методы, используя метод Any:

route.Any("/someAny", any)

Параметры в пути

Конечно, иногда вам нужно будет захватить сегменты URI в вашем маршруте. Например, вам может понадобиться захватить идентификатор пользователя из URL. Вы можете сделать это, определив параметры маршрута:

route.Get("/user/{id}", func(req *context.Request, id string) *context.Response {
    return
``` **Тинк гоу. Текст (фнт. Спринтф («Пользователь %s», ид))**

Вы можете определить столько параметров маршрута, сколько требуется для вашего маршрута:

**Тинк гоу. Текст («Возможно определение такого количества параметров маршрута, которое требуется вашему маршруту»)**

```go
route.Get("/posts/{post}/comments/{comment}", func(req *context.Request, postId, commentId string) *context.Response {
    //
})

Префиксы маршрутов

Метод префикса может использоваться для добавления префикса к каждому маршруту в группе с заданным URI. Например, вы можете захотеть добавить префикс «admin» ко всем URI маршрутов в группе:

Префиксы маршрутов могут быть использованы для добавления префиксов к маршрутам группы. В качестве примера можно привести добавление префикса «admin» к URI всех маршрутов группы.

route.Prefix("/admin").Group(func(group *router.Route) {
    group.Prefix("user").Group(func(group *router.Route) {
        // ...  
    })
    group.Prefix("posts").Group(func(group *router.Route) {
        // ...  
    })
})

Группы маршрутов

Группы маршрутов позволяют совместно использовать атрибуты маршрутов, такие как промежуточное ПО или префикс, для большого количества маршрутов без необходимости определять эти атрибуты для каждого отдельного маршрута.

Группы маршрутов предоставляют возможность совместного использования атрибутов маршрутов, таких как промежуточное программное обеспечение и префиксы, для множества маршрутов. При этом нет необходимости определять атрибуты для каждого маршрута отдельно.

route.Prefix("/admin").Group(func(group *router.Route) {
    group.Prefix("user").Group(func(group *router.Route) {
        group.Get("", func(request *context.Request) *context.Response {
            return thinkgo.Text("admin user !")
        }).Middleware(func(request *context.Request, next router.Closure) interface{} {
            if _, err := request.Input("id"); err != nil {
                return thinkgo.Text("Invalid parameters")
            }
            return next(request)
        })
        group.Get("edit", func(request *context.Request) *context.Response {
            return thinkgo.Text("admin user edit !")
        })
    }).Middleware(func(request *context.Request, next router.Closure) interface{} {
        if _, err := request.Input("user"); err != nil {
            return thinkgo.Text("Invalid parameters")
        }
        return next(request)
    })
}).Middleware(func(request *context.Request, next router.Closure) interface{} {
    if _, err := request.Input("token"); err != nil {
        return thinkgo.Text("Invalid parameters")
    }
    return next(request)
})

Промежуточное ПО

Промежуточное ПО предоставляет удобный механизм фильтрации HTTP-запросов, поступающих в приложение. Вам нужно только реализовать интерфейс Middleware.

Промежуточное программное обеспечение обеспечивает удобный способ фильтрации входящих HTTP-запросов. Для этого необходимо реализовать интерфейс Middleware.

route.Get("/foo", func(request *context.Request) *context.Response {
    return thinkgo.Text("Hello ThinkGo !")
}).Middleware(func(request *context.Request, next router.Closure) interface{} {
    if _, err := request.Input("name"); err != nil {
        return thinkgo.Text("Invalid parameters")
    }
    return next(request)
})

Промежуточное ПО до обработки запроса

Будет ли промежуточное ПО выполняться до или после обработки запроса, зависит от самого промежуточного ПО. Например, следующее промежуточное ПО будет выполнять некоторую задачу до того, как запрос будет обработан приложением:

Выполнение промежуточного программного обеспечения до или после обработки запроса зависит от него самого. Так, например, следующее промежуточное программное обеспечение выполняет определённую задачу перед обработкой запроса приложением.

func(request *context.Request, next router.Closure) interface{} {

    // Perform action   
    // ...

    return next(request)
}

После обработки запроса

Однако это промежуточное ПО выполнит свою задачу после того, как запрос будет обработан приложением:

В то же время это промежуточное программное обеспечение выполнит свою задачу уже после обработки запроса приложением:

func(request *context.Request, next router.Closure) interface{} {

    response := next(request)

    // Perform action   
    // ...

    return response
}

Контроллер

Базовый контроллер

Ниже приведён пример базового класса контроллера.

Пример базового класса контроллера представлен ниже.

package controller

import (
    "github.com/forgoer/thinkgo"
    "github.com/forgoer/thinkgo/context"
)

func Index(req *context.Request) *context.Response {
    return thinkgo.Text("Hello ThinkGo !")
}

Вы можете определить маршрут для этого контроллера следующим образом:

Для этого контроллера можно определить маршрут следующим образом.

route.Get("/", controller.Index)

Контроллер ресурсов

Эта функция будет поддерживаться в будущем выпуске.

HTTP-запрос

Доступ к запросу

Чтобы получить экземпляр текущего HTTP-запроса через внедрение зависимостей

Чтобы получить текущий HTTP-запрос через внедрение зависимости

func Handler(req *context.Request) *context.Response {
    name := req.Input("name")
}

Внедрение зависимостей и параметры маршрута

Если метод контроллера также ожидает ввода данных от параметра маршрута, вам следует перечислить параметры вашего маршрута после зависимостей запроса. Например, вы можете получить доступ к... Ваш запрос:

your route parameter name like so:

route.Put("/user/{name}", func(req *context.Request, name string) *context.Response {
    //
})

Перевод:

Ваш параметр маршрута name:

route.Put("/user/{name}", функция(req *context.Запрос, имя строка) *context.Ответ {
    // 
})

Далее идёт текст без запроса перевода.

Пожалуйста, сообщите, если у вас остались вопросы. Извлечение и сохранение

Иногда требуется извлечь элемент из кэша, а также сохранить значение по умолчанию, если запрошенный элемент не существует. Например, можно извлечь всех пользователей из кэша или, если их там нет, получить их с помощью обратного вызова и добавить в кэш. Это можно сделать с помощью метода Remember:

var foo int

cache.Remember("foo", &a, 1*time.Minute, func() interface{} {
    return "thinkgo"
})

См. ThinkGo Cache (https://github.com/forgoer/thinkgo/tree/master/cache).

ORM

См. ThinkORM (https://github.com/forgoer/thinkorm).

Лицензия

Этот проект лицензирован под лицензией Apache 2.0 (LICENSE).

Контакты

Если у вас есть какие-либо проблемы или пожелания, пожалуйста, свяжитесь с нами. Мы приветствуем PR.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Это лёгкий MVC-фреймворк, созданный на языке Go. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/thinkgo-thinkgo.git
git@api.gitlife.ru:oschina-mirror/thinkgo-thinkgo.git
oschina-mirror
thinkgo-thinkgo
thinkgo-thinkgo
master