Go Iris-Web-Framework starten
Installation
Hinweis: Erfordert Go-Version 1.20 oder höher.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
Importieren Sie es in Ihren Code:
import "github.com/kataras/iris/v12"
Problembehandlung bei der Installation
Wenn während der Installation Netzwerkfehler auftreten, stellen Sie sicher, dass die Umgebungsvariable GOPROXY auf einen gültigen Wert gesetzt ist.
go env -w GOPROXY=https://goproxy.io,direct
Wenn die obigen Methoden das Problem nicht lösen, leeren Sie den Go-Modulcache:
go clean --modcache
Schnellstart
Funktionsmodus
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// Definieren Sie die Iris-Instanz
app := iris.New()
// Definieren Sie eine Routengruppe (hier wird eine Routengruppe mit einem /books-Präfix definiert)
booksAPI := app.Party("/books")
{
// Middleware verwenden
booksAPI.Use(iris.Compression)
// Routen und Routenhandler festlegen
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// Auf Port hören
app.Listen(":8080")
}
// Buchbeispiel.
type Book struct {
Title string `json:"title"`
}
func list(ctx iris.Context) {
books := []Book{
{"Concurrency in Go meistern"},
{"Go-Designmuster"},
{"Black Hat Go"},
}
ctx.JSON(books)
// Hinweis: Response-Verhandlung basierend auf der Priorität des Servers und der Präferenz des Clients
// anstelle von ctx.JSON verwenden:
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// Hinweis: Verwenden Sie ctx.ReadBody(&b), um eingehende Daten jeden Typs zu binden.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Fehler beim Erstellen des Buchs").DetailErr(err))
// Hinweis: Verwenden Sie ctx.StopWithError(code, err), wenn nur eine Klartextantwort bei einem Fehler erwartet wird.
return
}
println("Buch erhalten: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
MVC-Architekturmuster
Importieren Sie das MVC-Paket
import "github.com/kataras/iris/v12/mvc"
Richten Sie den Controller basierend auf der Routengruppe ein
m := mvc.New(booksAPI)
m.Handle(new(BookController))
Controller-Implementierung
type BookController struct {
/* Dependency Injection */
}
// Reagieren auf GET: http://localhost:8080/books
func (c *BookController) Get() []Book {
return []Book{
{"Mastering Go Concurrency"},
{"Go Design Patterns"},
{"Black Hat Go"},
}
}
// Reagieren auf POST: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
println("Buch empfangen: " + b.Title)
return iris.StatusCreated
}
Starten Sie Ihren Iris-Webserver:
$ go run main.go
> Hören auf: http://localhost:8080
> Anwendung wurde gestartet. Drücken Sie STRG+C, um herunterzufahren.
Liste Bücher auf:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"title": "Mastering Go Concurrency"
},
{
"title": "Go Design Patterns"
},
{
"title": "Black Hat Go"
}
]
Erstellen Sie ein neues Buch:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"Einen Interpreter in Go schreiben\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Erstellt
Dies ist ein Beispiel für eine Fehlerantwort:
$ curl -X POST --data "{\"title\":\"Ungültiges Buch\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Schlechte Anfrage
{
"status": 400,
"title": "Bucherstellung fehlgeschlagen",
"detail": "ungültiges Zeichen '\"' nach Objektschlüssel"
}