Saat membuat Web, kita biasanya ingin membuat banyak sekali endpoint URL, HandlerFunc
sayannya tidak mendukung hal itu. Alternative nya kita bisa menggunakan ServeMux
yang merupakan implementasi Handler
yang bisa mendukung multiple endpoint.
Berikut adalah contoh baris kode jika kita ingin membuat multiple endpoint dengan ServeMux
package belajar_golang_web
import (
"fmt"
"net/http"
"testing"
)
func TestServeMux(t *testing.T) {
mux := http.NewServeMux()
mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprint(writer, "Hello World")
})
mux.HandleFunc("/hi", func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprint(writer, "Hi")
})
server := http.Server{
Addr: "localhost:8080",
Handler: mux,
}
err := server.ListenAndServe()
if err != nil {
panic(err)
}
}

Pada baris kode diatas perhatikan baris ke 11 dan 14, dimana kita membuat 2 HandleFunc
dengan mux
yang kita deklarasikan di baris 10. Selanjutnya yang perlu di perhatikan lagi adalah di baris 19 dimana Handler nya kita menggunakan mux
. Coba lah akses kembali url http://localhost:8080
danhttp://localhost:8080/hi


Bisa dilihat jika sat ini kita sudah berhasil membuat server dengan multiple endpoint.
URL Pattern
URL Pattern dalam ServeMux
sederhana, kita tinggal menambahkan string yang ingin kita gunakan sebagai endpoint, tanpa perlu memasukkan domain web kita. Jika URL Pattern dalam ServeMux
kita tambahkan diakhirnya dengan garis miring, artinya semua URL tersebut akan menerima path dengan awalan tersebut, misal /images/
artinya semua URL tersebut akan menerima path dengan awalan tersebut, misal /images/
artinya akan di eksekusi jike endpoint nya /images/, /images/contoh, /images/contoh/lagi
. Namun jika terdapat URL Pattern yang lebih panjang, maka akan di prioritaskan yang lebih panjang, misal jika terdapat URL /images/
dan /images/thumbnails/
, maka jika mengakses /images/thumbnails/
akan mengakses /images/thumbnails/
bukan /images/
.
Pada artikel kali ini kita telah belajar cara membuat ServeMux pada bahasa pemrogaman golang. Dan pada artikel selanjutnya saya akan membahas Request pada golang web.