Routing: Method & Parameter Path
Membedakan GET/POST pada alamat yang sama dan membaca nilai dinamis seperti /todos/{id}.
Pola routing modern (Go 1.22+)
Sejak Go 1.22, pola alamat pada ServeMux bisa memuat method HTTP dan bagian dinamis. Ini membuat routing REST sangat rapi tanpa library tambahan.
mux.HandleFunc("GET /todos", listTodos) // hanya method GET
mux.HandleFunc("POST /todos", createTodo) // alamat sama, method beda
mux.HandleFunc("GET /todos/{id}", getTodo) // {id} = bagian dinamis
mux.HandleFunc("DELETE /todos/{id}", deleteTodo)
Format pola
"METHOD /alamat" — satu spasi memisahkan method dan alamat. Jika method tidak ditulis ("/hello"), semua method diterima.
Parameter path: {id}
Bagian di dalam kurung kurawal adalah wildcard. Nilainya diambil di dalam handler dengan r.PathValue("nama"), dan selalu bertipe string:
func getTodo(w http.ResponseWriter, r *http.Request) {
id := r.PathValue("id") // alamat /todos/42 → id = "42"
fmt.Fprint(w, "Todo nomor ", id)
}
Otomatis 405 Method Not Allowed
Jika alamatnya cocok tetapi methodnya tidak terdaftar (misal POST /todos/42 padahal hanya ada GET /todos/{id}), Go otomatis menjawab 405 Method Not Allowed. Bedakan dengan 404, yaitu alamatnya sendiri tidak dikenal.
Kalau ada beberapa pola yang cocok?
Go memilih pola yang paling spesifik. /todos/export (tanpa wildcard) akan menang atas /todos/{id}.