Fiber
terinspirasi oleh kerangka kerja Web
paling populer Express
di Internet. Kami menggabungkan kemudahan penggunaan dari Express
dan kinerja tinggi dari Go
. Jika Anda pernah membangun aplikasi Web
menggunakan Node.js
(menggunakan Express atau kerangka kerja serupa), maka banyak metode dan prinsip seharusnya sangat mudah dipahami untuk Anda.
Memulai Cepat
Instalasi
Pastikan Anda telah menginstal Go 1.17
atau yang lebih tinggi.
Inisialisasi proyek Anda dengan membuat folder dan menjalankan go mod init github.com/your/repo
di dalam folder, lalu pasang Fiber menggunakan perintah go get
:
go get -u github.com/gofiber/fiber/v2
Hello World
package main
// Impor paket fiber
import "github.com/gofiber/fiber/v2"
func main() {
// Tentukan aplikasi fiber
app := fiber.New()
// Tentukan rute http
app.Get("/", func(c *fiber.Ctx) error {
// Mengembalikan hello world sebagai string
return c.SendString("Halo, Dunia ?!")
})
// Dengarkan di port 3000
app.Listen(":3000")
}
Akses melalui: http://localhost:3000/
Perutean Dasar
Contoh perutean dasar Fiber
func main() {
app := fiber.New()
// GET /api/register
app.Get("/api/*", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("✋ %s", c.Params("*"))
return c.SendString(msg) // => ✋ register
})
// GET /flights/LAX-SFO
app.Get("/flights/:from-:to", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("? Dari: %s, Ke: %s", c.Params("from"), c.Params("to"))
return c.SendString(msg) // => ? Dari: LAX, Ke: SFO
})
// GET /dictionary.txt
app.Get("/:file.:ext", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("? %s.%s", c.Params("file"), c.Params("ext"))
return c.SendString(msg) // => ? kamus.txt
})
// GET /john/75
app.Get("/:name/:age/:gender?", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("? %s berusia %s tahun", c.Params("name"), c.Params("age"))
return c.SendString(msg) // => ? john berusia 75 tahun
})
// GET /john
app.Get("/:name", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("Halo, %s ?!", c.Params("name"))
return c.SendString(msg) // => Halo john ?!
})
log.Fatal(app.Listen(":3000"))
}
Menyajikan Berkas Statis
Mengatur penyajian berkas statis
func main() {
app := fiber.New()
app.Static("/", "./public")
// => http://localhost:3000/js/script.js
// => http://localhost:3000/css/style.css
app.Static("/prefix", "./public")
// => http://localhost:3000/prefix/js/script.js
// => http://localhost:3000/prefix/css/style.css
app.Static("*", "./public/index.html")
// => http://localhost:3000/any/path/shows/index/html
log.Fatal(app.Listen(":3000"))
}
Middleware
Meningkatkan kemampuan untuk menangani permintaan HTTP melalui middleware.
func main() {
app := fiber.New()
// Padankan setiap rute, di sini menyesuaikan middleware menggunakan fungsi penutup
app.Use(func(c *fiber.Ctx) error {
fmt.Println("? Penangan pertama")
// Lanjutkan penanganan middleware atau fungsi rute berikutnya
return c.Next()
})
// Padankan rute yang dimulai dengan /api
app.Use("/api", func(c *fiber.Ctx) error {
fmt.Println("? Penangan kedua")
return c.Next()
})
// Gunakan middleware bawaan untuk menangani pengecualian
app.Use(recover.New())
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) error {
fmt.Println("? Penangan terakhir")
return c.SendString("Halo, Dunia ?!")
})
log.Fatal(app.Listen(":3000"))
}
Mesin Template
Jika mesin template tidak diatur, Fiber
secara default menggunakan html/template.
package main
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/pug"
)
func main() {
// Atur mesin template
app := fiber.New(fiber.Config{
Views: pug.New("./views", ".pug"),
})
app.Get("/", func(c *fiber.Ctx) error {
// Render template ./views/home.pug menggunakan parameter template fiber.Map
return c.Render("home", fiber.Map{
"title": "Beranda",
"year": 1999,
})
})
log.Fatal(app.Listen(":3000"))
}
Middleware Pem Sharing Sumber Daya Cross-Origin (CORS)
Middleware untuk CORS di Fiber, dapat mengaktifkan pembagian sumber daya lintas domain dengan berbagai opsi untuk mencegah serangan CORS.
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
)
func main() {
app := fiber.New()
// Konfigurasi CORS default
app.Use(cors.New())
// Atau sesuaikan parameter CORS untuk mengizinkan permintaan dari domain tertentu
app.Use(cors.New(cors.Config{
AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
AllowHeaders: "Origin, Content-Type, Accept",
}))
log.Fatal(app.Listen(":3000"))
}
Periksa CORS dengan melewatkan domain apa pun dalam header Origin
:
curl -H "Origin: https://www.tizi365.com" --verbose http://localhost:3000
Respon 404 Kustom
func main() {
app := fiber.New()
app.Static("/", "./public")
app.Get("/demo", func(c *fiber.Ctx) error {
return c.SendString("Ini adalah demo!")
})
app.Post("/register", func(c *fiber.Ctx) error {
return c.SendString("Selamat datang!")
})
// Middleware yang terakhir dirujuk akan cocok dengan semua permintaan, termasuk 404
app.Use(func(c *fiber.Ctx) error {
// Logika penanganan lain
// Mengembalikan status 404
return c.SendStatus(404)
// => 404 "Not Found"
})
log.Fatal(app.Listen(":3000"))
}
Respon JSON
Contoh Fiber mengembalikan data JSON.
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
app := fiber.New()
app.Get("/user", func(c *fiber.Ctx) error {
return c.JSON(&User{"John", 20})
// => {"name":"John", "age":20}
})
app.Get("/json", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{
"success": true,
"message": "Hai John!",
})
// => {"success":true, "message":"Hai John!"}
})
log.Fatal(app.Listen(":3000"))
}
Middleware Pemulihan
Mencegah kesalahan panic untuk mencegah kegagalan dan keluar dari program.
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
)
func main() {
app := fiber.New()
// Gunakan middleware panic untuk menangkap pengecualian panic
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
panic("biasanya ini akan membuat aplikasi Anda crash")
})
log.Fatal(app.Listen(":3000"))
}
Benchmark
[
Batasan
- Karena penggunaan fitur yang tidak aman dalam Fiber, mungkin tidak kompatibel dengan versi Go terbaru. Fiber 2.40.0 telah diuji pada versi Go 1.17 hingga 1.21.
- Fiber tidak kompatibel dengan antarmuka net/http. Artinya, Anda tidak dapat langsung menggunakan proyek-proyek seperti gqlgen, go-swagger, atau proyek lain yang termasuk dalam ekosistem net/http.