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:
package mainimport ( "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 tamufunc 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).