Introdução
O Go Iris Web Framework é uma estrutura poderosa para desenvolvimento web em Go.
Instalação
Nota: Requer a versão 1.20 ou superior do Go.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
Importe no seu código:
import "github.com/kataras/iris/v12"
Solução de Problemas na Instalação
Se encontrar erros de rede durante a instalação, verifique se a variável de ambiente GOPROXY está definida como um valor válido.
go env -w GOPROXY=https://goproxy.io,direct
Se os métodos acima não resolverem o problema, limpe o cache do módulo go:
go clean --modcache
Início Rápido
Modo Funcional
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// Define a instância iris
app := iris.New()
// Define um grupo de rotas, (aqui define um grupo de rotas com o prefixo /books)
booksAPI := app.Party("/books")
{
// Use middleware
booksAPI.Use(iris.Compression)
// Defina rotas e manipuladores de rota
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// Escute na porta
app.Listen(":8080")
}
// Exemplo de livro.
type Book struct {
Title string `json:"title"`
}
func list(ctx iris.Context) {
books := []Book{
{"Dominando a Concorrência em Go"},
{"Padrões de Design em Go"},
{"Black Hat Go"},
}
ctx.JSON(books)
// Nota: Negociação da resposta com base na prioridade do servidor e na preferência do cliente
// em vez de usar ctx.JSON:
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// Nota: use ctx.ReadBody(&b) para vincular dados de entrada de qualquer tipo.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Falha ao criar livro").DetailErr(err))
// Nota: Use ctx.StopWithError(código, err) ao esperar somente uma resposta de texto simples em caso de erro.
return
}
println("Livro recebido: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
Padrão Arquitetural MVC
Importe o pacote MVC
import "github.com/kataras/iris/v12/mvc"
Configure o controlador com base no grupo de rotas
m := mvc.New(booksAPI)
m.Handle(new(BookController))
Implementação do Controlador
type BookController struct {
/* Injeção de Dependência */
}
// Responder a GET: http://localhost:8080/books
func (c *BookController) Get() []Book {
return []Book{
{"Dominando a Concorrência em Go"},
{"Padrões de Design em Go"},
{"Go para Hackers"},
}
}
// Responder a POST: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
println("Livro recebido: " + b.Title)
return iris.StatusCreated
}
Execute seu servidor Web Iris:
$ go run main.go
> Ouvindo em: http://localhost:8080
> Aplicação iniciada. Pressione CTRL+C para desligar.
Liste os livros:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"title": "Dominando a Concorrência em Go"
},
{
"title": "Padrões de Design em Go"
},
{
"title": "Go para Hackers"
}
]
Crie um novo livro:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"Escrevendo um Interpretador em Go\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Created
Este é um exemplo de resposta de erro:
$ curl -X POST --data "{\"title\" \"Livro Inválido\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Bad Request
{
"status": 400,
"title": "Falha na criação do livro",
"detail": "caractere inválido '\"' após a chave do objeto"
}