Memulai dengan Kerangka Kerja Web Go Iris
Instalasi
Catatan: Memerlukan versi Go 1.20 atau lebih tinggi.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
Impor di kode Anda:
import "github.com/kataras/iris/v12"
Troubleshooting Instalasi
Jika Anda mengalami kesalahan jaringan selama instalasi, pastikan bahwa variabel lingkungan GOPROXY diatur ke nilai yang valid.
go env -w GOPROXY=https://goproxy.io,direct
Jika metode di atas tidak menyelesaikan masalah, bersihkan cache modul go:
go clean --modcache
Memulai dengan Cepat
Mode Fungsional
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// Mendefinisikan instance iris
app := iris.New()
// Mendefinisikan grup rute, (di sini mendefinisikan grup rute dengan awalan /books)
booksAPI := app.Party("/books")
{
// Gunakan middleware
booksAPI.Use(iris.Compression)
// Tetapkan rute dan pengendali rute
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// Mendengarkan pada port
app.Listen(":8080")
}
// Contoh buku
type Book struct {
Title string `json:"title"`
}
func list(ctx iris.Context) {
books := []Book{
{"Penguasaan Keterkaitan di Go"},
{"Pola Desain Go"},
{"Go Hitam"},
}
ctx.JSON(books)
// Catatan: Negosiasi respons berdasarkan prioritas server dan preferensi klien
// daripada menggunakan ctx.JSON:
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// Catatan: gunakan ctx.ReadBody(&b) untuk mengikat data masukan dari jenis apa pun.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Gagal membuat buku").DetailErr(err))
// Catatan: Gunakan ctx.StopWithError(code, err) saat mengharapkan respons teks polos hanya dalam kasus kesalahan.
return
}
println("Menerima buku: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
Pola Arsitektur MVC
Impor paket MVC
import "github.com/kataras/iris/v12/mvc"
Atur kontroler berdasarkan grup rute
m := mvc.New(booksAPI)
m.Handle(new(BookController))
Implementasi kontroler
type BookController struct {
/* Inject Dependency */
}
// Tanggapi GET: http://localhost:8080/books
func (c *BookController) Get() []Book {
return []Book{
{"Mastering Go Concurrency"},
{"Go Design Patterns"},
{"Black Hat Go"},
}
}
// Tanggapi POST: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
println("Menerima buku: " + b.Title)
return iris.StatusCreated
}
Jalankan server web Iris Anda:
$ go run main.go
> Mendengarkan di: http://localhost:8080
> Aplikasi telah dimulai. Tekan CTRL+C untuk menonaktifkan.
Daftar buku:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"title": "Mastering Go Concurrency"
},
{
"title": "Go Design Patterns"
},
{
"title": "Black Hat Go"
}
]
Buat buku baru:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"Menulis Interpreter di Go\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Created
Ini adalah contoh respon error:
$ curl -X POST --data "{\"title\" \"Buku Tidak Valid\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Bad Request
{
"status": 400,
"title": "Pembuatan buku gagal",
"detail": "karakter '\"' tidak valid setelah kunci objek"
}