Routing & ServeMux

Duration: 15 min•Difficulty: Easy•

Salah satu alasan Go sangat populer untuk backend adalah karena Standard Library-nya (net/http) sudah sangat canggih. Anda bisa membuat web server level production tanpa perlu menginstall framework tambahan (seperti Express di JS atau Laravel di PHP).

Konsep: ServeMux (The Router)

Dalam kode Go, kita sering melihat istilah ServeMux. Ini singkatan dari Server Request Multiplexer.

Analogi Resepsionis Hotel 🏨

Bayangkan Web Server Anda adalah sebuah Hotel, dan ServeMux adalah Resepsionis di meja depan.

  1. Tamu Datang (Request): Seseorang datang membawa alamat tujuan (URL Path), misal /kamar-101.
  2. Resepsionis Mengecek (Routing): ServeMux melihat buku daftar: "Oh, /kamar-101 ditangani oleh Petugas A".
  3. Mengarahkan (Dispatch): ServeMux memanggil Petugas A (Handler Function) untuk melayani tamu tersebut.

Kode Dasar

Berikut adalah implementasi "Resepsionis" tersebut dalam kode:

MAIN.GO
package main
import (
"fmt"
"net/http"
)
func main() {
// 1. Membuat Resepsionis (Router)
mux := http.NewServeMux()
// 2. Mendaftarkan Aturan (Route)
// "Kalau ada yang ke '/', panggil homeHandler"
mux.HandleFunc("/", homeHandler)
// "Kalau ada yang ke '/about', panggil aboutHandler"
mux.HandleFunc("/about", aboutHandler)
fmt.Println("Server berjalan di port 8080...")
// 3. Membuka Hotel (Menjalankan Server)
// Server akan terus menyala (looping) menunggu request masuk
http.ListenAndServe(":8080", mux)
}
// Handler: Petugas yang melayani tamu
func homeHandler(w http.ResponseWriter, r *http.Request) {
// PENTING: Validasi Path
// Di Go standar, path "/" itu serakah (catch-all).
// Jika user akses "/halaman-ngawur", tetap masuk sini.
// Jadi kita harus cek manual.
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
// Menulis respon ke tamu
w.Write([]byte("Selamat Datang di Home!"))
}
func aboutHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Halaman About"))
}

Bedah Komponen

Setiap Handler Function di Go selalu menerima dua parameter wajib:

  1. `w http.ResponseWriter` (Kertas Jawaban):

Alat untuk mengirim data BALIK ke user.

  • w.Write(): Tulis isi pesan.
  • w.WriteHeader(): Tulis status kode (200, 404, 500).
  1. `r *http.Request` (Surat Permintaan):

Berisi data yang DIBAWA oleh user.

  • r.URL.Path: User mau ke alamat mana?
  • r.Method: User mau ngapain? (GET/POST).
  • r.Body: Data apa yang dikirim? (misal form login).