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"
}