Démarrage avec le framework web Go Iris
Installation
Remarque : Nécessite la version Go 1.20 ou supérieure.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
Importez-le dans votre code :
import "github.com/kataras/iris/v12"
Résolution des problèmes d'installation
Si vous rencontrez des erreurs réseau lors de l'installation, assurez-vous que la variable d'environnement GOPROXY est définie sur une valeur valide.
go env -w GOPROXY=https://goproxy.io,direct
Si les méthodes ci-dessus ne résolvent pas le problème, videz le cache du module Go :
go clean --modcache
Démarrage rapide
Mode fonctionnel
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// Définir l'instance iris
app := iris.New()
// Définir un groupe de routes, (ici définit un groupe de routes avec un préfixe /books)
booksAPI := app.Party("/books")
{
// Utiliser un middleware
booksAPI.Use(iris.Compression)
// Définir les routes et les gestionnaires de routes
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// Écouter sur le port
app.Listen(":8080")
}
// Exemple de livre.
type Book struct {
Title string `json:"title"`
}
func list(ctx iris.Context) {
books := []Book{
{"Maîtriser la concurrence en Go"},
{"Modèles de conception Go"},
{"Chapeau noir Go"},
}
ctx.JSON(books)
// Remarque : Négociation de la réponse basée sur la priorité du serveur et la préférence du client
// au lieu d'utiliser ctx.JSON :
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// Remarque : utilisez ctx.ReadBody(&b) pour lier les données entrantes de n'importe quel type.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Échec de la création du livre").DetailErr(err))
// Remarque : utilisez ctx.StopWithError(code, err) en cas d'attente d'une réponse en texte brut uniquement en cas d'erreur.
return
}
println("Livre reçu : " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
Modèle architectural MVC
Importer le package MVC
import "github.com/kataras/iris/v12/mvc"
Configurer le contrôleur basé sur le groupe de routes
m := mvc.New(booksAPI)
m.Handle(new(BookController))
Implémentation du contrôleur
type BookController struct {
/* Injection de dépendance */
}
// Répondre à GET: http://localhost:8080/books
func (c *BookController) Get() []Book {
return []Book{
{"Maîtriser la concurrence en Go"},
{"Modèles de conception Go"},
{"Go Black Hat"},
}
}
// Répondre à POST: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
println("Livre reçu : " + b.Title)
return iris.StatusCreated
}
Exécutez votre serveur web Iris :
$ go run main.go
> En écoute sur : http://localhost:8080
> L'application a démarré. Appuyez sur CTRL+C pour l'arrêter.
Listez les livres :
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"title": "Maîtriser la concurrence en Go"
},
{
"title": "Modèles de conception Go"
},
{
"title": "Go Black Hat"
}
]
Créez un nouveau livre :
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"Écrire un interpréteur en Go\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Créé
Il s'agit d'un exemple de réponse d'erreur :
$ curl -X POST --data "{\"title\" \"Livre invalide\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Requête incorrecte
{
"status": 400,
"title": "Échec de la création du livre",
"detail": "caractère invalide «" après la clé de l'objet"
}