Yang Baru pada Routing Standard Library Go 1.22

Go dengan versi 1.22 pada saat artikel ini dibuat sedang dalam masa unstable yang artinya belum dirilis secara publik. Namun kita bisa instal versi tersebut dengan aturan sebelumnya kita sudah pernah instal Go versi berapa pun pada mesin kita.

$ go install golang.org/dl/go1.22rc1@latest

Ada salah satu fitur yang sangat sekali menarik bagi saya yang di mana fitur ini sangat diharapkan beberapa orang letaknya berada di dalam standard library net/http yaitu routing nya.

Go <1.21

Sebelumnya pada versi Go 1.21 ke bawah, jika ingin membuat 2 buah route dengan tipe Method yang berbeda bisa menggunakan cara seperti ini:

mux := http.NewServeMux()

mux.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
    if r.Method == "GET" {
        fmt.Fprint(w, "/users GET")
    } else if r.Method == "POST" {
        fmt.Fprint(w, "/users POST")
    }
})

log.Println("server running at :3000")
http.ListenAndServe(":3000", mux)

Cara di atas adalah salah satu cara termudah untuk melakukan pembagian Method pada route. Tidak ada yang salah pada kode tersebut, jika kita melakukan request menggunakan curl hasilnya sesuai apa yang diharapkan.

$ curl -X GET http://localhost:3000/users
/users GET

$ curl -X POST http://localhost:3000/users
/users POST

Go 1.22

Pada Go dengan versi 1.22 cara tersebut menjadi sintaks yang lebih “ekspresif”. Pola yang digunakan oleh net/http.ServeMux telah ditingkatkan bisa menerima Method yang diinginkan.

mux := http.NewServeMux()

mux.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "/users GET")
})

mux.HandleFunc("POST /users", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "/users POST")
})

log.Println("server running at :3000")
http.ListenAndServe(":3000", mux)

Cara yang diatas menurut saya adalah cara revolusioner, bagaimana hanya menggunakan standard library juga bisa melakukan routing yang sedikit lebih canggih daripada versi Go sebelumnya.

$ curl -X GET http://localhost:3000/users
/users GET

$ curl -X POST http://localhost:3000/users
/users POST

Catatan Kaki