Начало работы с веб-фреймворком Go Iris
Установка
Примечание: требуется версия Go 1.20 или выше.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
Импортируйте в свой код:
import "github.com/kataras/iris/v12"
Устранение неполадок при установке
Если возникают ошибки сети во время установки, убедитесь, что переменная среды GOPROXY установлена на допустимое значение.
go env -w GOPROXY=https://goproxy.io,direct
Если вышеуказанные методы не решают проблему, очистите кеш модуля Go:
go clean --modcache
Быстрый старт
Функциональный режим
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// Определите экземпляр iris
app := iris.New()
// Определите группу маршрутов, (здесь определена группа маршрутов с префиксом /books)
booksAPI := app.Party("/books")
{
// Используйте промежуточное ПО
booksAPI.Use(iris.Compression)
// Установите маршруты и обработчики маршрутов
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// Прослушивание порта
app.Listen(":8080")
}
// Пример книги
type Book struct {
Title string `json:"title"`
}
func list(ctx iris.Context) {
books := []Book{
{"Овладение параллелизмом в Go"},
{"Шаблоны проектирования на Go"},
{"Черный шляп Go"},
}
ctx.JSON(books)
// Примечание: Ответный выбор основан на приоритете сервера и предпочтении клиента
// вместо использования ctx.JSON:
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// Примечание: используйте ctx.ReadBody(&b) для привязки входных данных любого типа.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Создание книги не удалось").DetailErr(err))
// Примечание: Используйте ctx.StopWithError(code, err) при ожидании только текстового ответа в случае ошибки.
return
}
println("Получена книга: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
Архитектурный шаблон MVC
Импортировать пакет MVC
import "github.com/kataras/iris/v12/mvc"
Настроить контроллер на основе группы маршрутов
m := mvc.New(booksAPI)
m.Handle(new(BookController))
Реализация контроллера
type BookController struct {
/* Внедрение зависимостей */
}
// Обработка GET запроса: http://localhost:8080/books
func (c *BookController) Get() []Book {
return []Book{
{"Mastering Go Concurrency"},
{"Go Design Patterns"},
{"Black Hat Go"},
}
}
// Обработка POST запроса: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
println("Получена книга: " + b.Title)
return iris.StatusCreated
}
Запустите ваш веб-сервер Iris:
$ go run main.go
> Прослушивание: http://localhost:8080
> Приложение запущено. Нажмите CTRL+C для выключения.
Перечислите книги:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"title": "Mastering Go Concurrency"
},
{
"title": "Go Design Patterns"
},
{
"title": "Black Hat Go"
}
]
Создайте новую книгу:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"Writing an Interpreter in Go\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Created
Это пример ошибки в ответе:
$ curl -X POST --data "{\"title\" \"Invalid Book\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Bad Request
{
"status": 400,
"title": "Ошибка создания книги",
"detail": "недопустимый символ '\"' после ключа объекта"
}