Episode ini membangun project Fiber pertama yang benar-benar berjalan: menginstall Fiber v3, membuat instance app, menambahkan middleware Logger dan Recover, lalu mengembalikan respons JSON dan teks dengan status code yang benar, lengkap dengan pengujian lewat curl.

Cukup teori. Episode 3 mengajak kalian membangun project Fiber pertama yang benar-benar berjalan: hello world. Ini momen paling penting dalam sebuah series — ketika route pertama hidup dan merespons request lewat curl, semua konsep di episode 1 dan 2 mulai terasa nyata.
Target episode ini: membuat server kecil dengan beberapa endpoint, menambahkan middleware default Logger dan Recover, serta mengembalikan respons JSON dan teks dengan status code yang tepat. Semua pola ini menjadi fondasi seluruh episode berikutnya.
Pastikan environment episode 0 sudah siap. Buat module dan install Fiber v3:
mkdir hello-fiber
cd hello-fiber
go mod init github.com/username/hello-fiber
go get github.com/gofiber/fiber/v3@latestgo get github.com/gofiber/fiber/v3@latest menambahkan dependency ke go.mod. Setelah itu, buat file main.go — seluruh aplikasi hello world kita hidup di satu file ini.
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/logger"
"github.com/gofiber/fiber/v3/middleware/recover"
)
func main() {
app := fiber.New()
app.Use(logger.New())
app.Use(recover.New())
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("Halo Dunia")
})
app.Get("/health", func(c fiber.Ctx) error {
return c.JSON(fiber.Map{"status": "ok"})
})
log.Fatal(app.Listen(":3000"))
}fiber.New() membuat instance App kosong. logger.New() mencatat setiap request ke stdout, dan recover.New() menangkap panic agar server tidak mati — keduanya kita bedah mendalam di episode 6 dan 11. Perhatikan bahwa app.Listen(":3000") mengembalikan error, jadi kita bungkus dengan log.Fatal.
Jalankan server, lalu test dari terminal lain:
go run main.gocurl -i http://localhost:3000/Respons yang diharapkan: status 200 OK, header Content-Type: text/plain, dan body Halo Dunia. curl -i http://localhost:3000/ menampilkan header sekaligus body sehingga kalian bisa melihat keseluruhan respons.
curl -i http://localhost:3000/healthEndpoint kesehatan mengembalikan JSON {"status":"ok"} dengan header Content-Type: application/json.
Fiber menyediakan beberapa helper respons yang paling sering dipakai:
app.Get("/teks", func(c fiber.Ctx) error {
return c.SendString("respons teks biasa")
})
app.Get("/json", func(c fiber.Ctx) error {
return c.JSON(fiber.Map{"message": "respons json"})
})
app.Get("/created", func(c fiber.Ctx) error {
return c.Status(fiber.StatusCreated).JSON(fiber.Map{
"id": "123",
})
})
app.Get("/teks-status", func(c fiber.Ctx) error {
return c.Status(201).SendString("resource dibuat")
})c.SendString mengembalikan teks dengan Content-Type: text/plain, c.JSON mengubah map atau struct menjadi JSON, dan c.Status mengatur status code sebelum helper lain dipanggil. c.Status(fiber.StatusCreated).JSON(...) adalah pola umum untuk respons 201 Created pada operasi pembuatan resource.
curl -i http://localhost:3000/createdOutput menampilkan HTTP/1.1 201 Created. Seluruh konstanta status tersedia sebagai fiber.StatusOK, fiber.StatusBadRequest, fiber.StatusNotFound, dan seterusnya — sesuai dengan enumerasi net/http standar.
Tanpa logger, kalian tidak akan melihat apa pun saat request datang. logger.New() menulis satu baris log per request dengan format yang bisa dikustomisasi:
app.Use(logger.New(logger.Config{
Format: "[${time}] ${status} ${latency} ${ip} ${method} ${path}\n",
}))Format ${time}, ${status}, ${latency}, ${ip}, ${method}, dan ${path} adalah tag yang didukung logger Fiber. logger.New(logger.Config{Format: ...}) memungkinkan kalian menyesuaikan apa yang dicatat untuk kebutuhan audit atau debugging.
Recover menangkap panic di handler dan mengembalikan respons 500 Internal Server Error alih-alih mematikan server. Tanpa recover, satu panic bisa menghentikan seluruh proses. Di production, kombinasi logger dan recover adalah baseline minimum yang harus selalu ada.
Inti yang harus dibawa pulang:
go mod init lalu go get github.com/gofiber/fiber/v3@latest.fiber.New() lalu app.Get("/", handler) adalah resep dasar.app.Listen(":3000") mengembalikan error; bungkus dengan log.Fatal.c.SendString untuk teks, c.JSON untuk JSON, c.Status untuk status code.logger.New() dan recover.New() adalah middleware default wajib.curl -i.Di episode 4 selanjutnya kita masuk ke jantung router: routing, params, dan constraints — path parameter, wildcard, query parameter, constraint :id<int> dan minLen, route chaining, domain routing, serta group dan nested group. Ini akan mengubah cara kalian mendesain URL.