← Semua pembelajaran / Go Nol β†’ Enterprise
Fase 7 Β· Framework Web & Frontend

Butuh framework, atau tidak?

Di ekosistem lain, framework adalah titik awal. Di Go, pustaka standar sudah menutup sebagian besar kebutuhan, sehingga pertanyaannya berbalik: apa yang belum ada, dan apakah aku memerlukannya?

Sumber asli go.dev Resmi Rangkuman ~7 menit baca

Intisari

  • Sejak Go 1.22, ServeMux mengerti metode dan parameter jalur β€” alasan terbesar memakai router pihak ketiga hilang.
  • Semua framework Go berdiri di atas http.Handler; berpindah bukan penulisan ulang.
  • Yang belum ada di pustaka standar: grup middleware yang ringkas, pengikatan & validasi, dan dokumentasi OpenAPI.
  • Perbedaan performa antar framework hampir selalu tidak relevan β€” kuerimu jauh lebih mahal daripada routernya.
  • Rekomendasi: net/http + chi. Standar untuk semuanya, chi untuk kenyamanan routing.

Apa yang berubah di Go 1.22

// Sebelum Go 1.22 β€” inilah alasan orang memakai router pihak ketiga
mux.HandleFunc("/produk/", func(w http.ResponseWriter, r *http.Request) {
	if r.Method != http.MethodGet {
		http.Error(w, "", http.StatusMethodNotAllowed)
		return
	}
	id := strings.TrimPrefix(r.URL.Path, "/produk/")
	...
})

// Sejak Go 1.22
mux.HandleFunc("GET /produk/{id}", func(w http.ResponseWriter, r *http.Request) {
	id := r.PathValue("id")
	...
})

Yang masih belum ada di pustaka standar

Fiturnet/httpFramework
Routing metode + parameterβœ…βœ…
Middlewareβœ… manualβœ… dengan sintaks grup
Grup rute bersarang⚠️ lewat subrouter + StripPrefixβœ… ringkas
Bind + validasi body❌ tulis sendiriβœ… bawaan
Penanganan error terpusatβŒβœ… (Echo, Fiber)
Daftar rute untuk debuggingβŒβœ… (chi Walk)
Dokumentasi OpenAPI❌⚠️ lewat generator terpisah
Kompresi, CORS, request ID❌ tulis sendiri (~20 baris masing-masing)βœ… paket middleware

Peta pilihan

net/httpchiEchoGinFiber
Kompatibel http.Handlerβœ…βœ…AdaptorAdaptor❌
DependensiNolNol tambahanBeberapaBeberapafasthttp
Bind + validasiβ€”β€”βœ…βœ…βœ…
Konteks permintaan*http.Request*http.Requestecho.Context*gin.Context*fiber.Ctx
HTTP/2βœ…βœ…βœ…βœ…βŒ
Cocok untukLayanan kecilSebagian besarAPI menengah–besarTim yang sudah pakaiProksi/gateway throughput tinggi

Baris pertama tabel adalah yang paling penting. chi memakai http.Handler yang sama persis, jadi setiap middleware, setiap paket pihak ketiga, dan setiap contoh kode dari dokumentasi resmi Go langsung bekerja. Echo dan Gin memakai tipe konteks sendiri (dengan adaptor tersedia), dan Fiber memakai tumpukan HTTP yang sama sekali berbeda.

Soal benchmark

Anggaran waktu satu permintaan nyata:

  Routing                    0,001 ms   ← yang dibandingkan benchmark framework
  Middleware (log, auth)     0,05  ms
  Kueri database             8     ms   ← 99% waktumu ada di sini
  Serialisasi JSON           0,3   ms
  Jaringan ke klien          20    ms
  ────────────────────────────────────
  Total                      ~28 ms

Framework yang "tiga kali lebih cepat" mempercepat 0,001 ms jadi 0,0003 ms. Itu perbedaan 0,002% pada permintaan nyata. Benchmark "juta permintaan per detik" mengukur handler yang mengembalikan string statis β€” beban yang tidak ada di aplikasi mana pun. Pilih berdasarkan bentuk kode dan kompatibilitas, bukan angka itu.

Rekomendasi berdasarkan situasi

SituasiPilihanAlasan
Belajar Gonet/httpSemua yang kamu pelajari tetap berlaku di mana pun
Layanan kecil, < 20 rutenet/httpTidak ada yang kurang
Aplikasi web umumchiGrup middleware ringkas, tetap http.Handler
API besar dengan banyak validasiEchoBind + validasi + error terpusat mengurangi banyak kode
Tim sudah memakai GinGinKonsistensi lebih berharga daripada migrasi
Gateway/proksi throughput sangat tinggiFiberUkur dulu; harganya keluar dari ekosistem net/http

Kalau tetap memakai pustaka standar

// Yang perlu kamu tulis sendiri β€” semuanya pendek, dan semuanya
// sudah dibahas di Fase 3:
//   Pulihkan()        pemulih panic + stack trace          ~25 baris
//   RequestID()       ID per permintaan                     ~15 baris
//   Log()             log akses terstruktur                 ~30 baris
//   BatasWaktu()      timeout context                       ~10 baris
//   CORS()            header lintas asal                    ~25 baris
//   Kompres()         gzip untuk respons besar              ~30 baris
//   HeaderKeamanan()  CSP dan kawan-kawan (Fase 6)          ~20 baris
//
// Sekitar 150 baris yang ditulis sekali, dimiliki sendiri, dan tidak
// pernah berubah karena rilis mayor pustaka orang lain.

Jangan mencampur dua framework. Memakai router chi dengan konteks Gin, atau memasang middleware Echo di server Fiber, menghasilkan lapisan adaptor yang membingungkan dan bug yang sulit ditelusuri. Pilih satu tumpukan per binari, dan tetap di situ.

Latihan: tulis API CRUD kecil tiga kali β€” dengan net/http saja, dengan chi, dan dengan Echo. Hitung baris kodenya, dan lebih penting: perhatikan berapa banyak dari pengetahuanmu yang terbawa antar ketiganya. Itu yang menentukan biaya sesungguhnya dari sebuah pilihan framework.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.