Raffi Rabbani
Raffi Rabbani

Routing & ServeMux

# Web Development with Go
Easy
Icon

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).
  • 2. `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).