Rozpoczęcie pracy z frameworkiem internetowym Go Iris
Instalacja
Uwaga: Wymagana wersja Go 1.20 lub nowsza.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
Zaimportuj to w swoim kodzie:
import "github.com/kataras/iris/v12"
Rozwiązywanie problemów z instalacją
Jeśli podczas instalacji napotkasz błędy sieciowe, upewnij się, że zmienna środowiskowa GOPROXY jest ustawiona na prawidłową wartość.
go env -w GOPROXY=https://goproxy.io,direct
Jeśli powyższe metody nie rozwiązują problemu, wyczyść pamięć podręczną modułu go:
go clean --modcache
Szybki start
Tryb funkcyjny
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// Zdefiniuj instancję iris
app := iris.New()
// Zdefiniuj grupę tras, (tutaj zdefiniuj grupę tras z prefiksem /books)
booksAPI := app.Party("/books")
{
// Użyj oprogramowania pośredniczącego
booksAPI.Use(iris.Compression)
// Ustaw trasy i obsługę tras
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// Nasłuchuj na porcie
app.Listen(":8080")
}
// Przykład książki.
type Book struct {
Title string `json:"title"`
}
func list(ctx iris.Context) {
books := []Book{
{"Opanowanie współbieżności w Go"},
{"Wzorce projektowe w Go"},
{"Czarna magia Go"},
}
ctx.JSON(books)
// Uwaga: Negocjacja odpowiedzi bazuje na priorytecie serwera i preferencjach klienta
// zamiast używania ctx.JSON:
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// Uwaga: użyj ctx.ReadBody(&b), aby powiązać przychodzące dane dowolnego typu.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Nie udało się utworzyć książki").DetailErr(err))
// Uwaga: użyj ctx.StopWithError(code, err), jeśli oczekujesz odpowiedzi w zwykłym formacie tylko w przypadku błędu.
return
}
println("Otrzymano książkę: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
Wzorzec architektury MVC
Importuj pakiet MVC
import "github.com/kataras/iris/v12/mvc"
Ustaw kontroler na podstawie grupy tras
m := mvc.New(booksAPI)
m.Handle(new(KontrolerKsiazek))
Implementacja kontrolera
type KontrolerKsiazek struct {
/* Wstrzyknięcia zależności */
}
// Odpowiedz na żądanie GET: http://localhost:8080/books
func (c *KontrolerKsiazek) Get() []Ksiazka {
return []Ksiazka{
{"Zrozumieć równoległość w Go"},
{"Wzorce projektowe w Go"},
{"Czarna magia Go"},
}
}
// Odpowiedz na żądanie POST: http://localhost:8080/books
func (c *KontrolerKsiazek) Post(b Ksiazka) int {
println("Otrzymano książkę: " + b.Tytul)
return iris.StatusCreated
}
Uruchom serwer sieciowy Iris:
$ go run main.go
> Słuchanie na: http://localhost:8080
> Aplikacja została uruchomiona. Naciśnij CTRL+C, aby ją zamknąć.
Wylistuj książki:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"tytul": "Zrozumieć równoległość w Go"
},
{
"tytul": "Wzorce projektowe w Go"
},
{
"tytul": "Czarna magia Go"
}
]
Stwórz nową książkę:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"tytul\":\"Pisanie interpretera w Go\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Created
To jest przykład odpowiedzi z błędem:
$ curl -X POST --data "{\"tytul\" \"Niepoprawna Książka\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Bad Request
{
"status": 400,
"tytul": "Błąd podczas tworzenia książki",
"szczegoly": "nieprawidłowy znak '\"' po kluczu obiektu"
}