Untuk membuat routing dengan model query string, kita akan membuat 1 buah routing lagi yaitu /product yang nantinya akan kita akses dengan bentuk /product?id=1 . Parameter dari query string yang kita buat adalah id dan value bertipe int .
Kita akan mendaftarkan routing menggunakan http.handleFunc :
http.HandleFunc("/product", handlerProduct)
Selanjutnya kita akan membuat fungsi handler bernama handlerProduct :
Pada kode di atas, kita mendaftarkan parameter id menggunakan fungsi dari parameter r :
id := r.URL.Query().Get("id")
Kita memerlukan convert nilai string ke dalam int karena URL atau routing pastinya merupakan tipe data string . Untuk itu id yang diakses melalui query string akan diconvert menggunakan fungsi dari packagestrconv :
idNumber, err := strconv.Atoi(id)
Lalu kita akan membuat kondisi jika ada error dan id yang dimasukkan nilainya kurang dari 1 maka kita akan mengembalikan respon menggunakan fungsi http.NotFound .
if err !=nil&& idNumber <1 { http.NotFound(w, r)return }
Untuk menampilkan teks pada halaman website, kita tidak bisa menggunakan w.Write tetapi dapat menggunakan fungsi lain yaitu fmt.Fprintf :
fmt.Fprintf(w, "Product page: %d", idNumber)
Kode lengkapnya dapat dilihat di bawah ini:
packagemainimport ("fmt""log""net/http""strconv")funchandlerIndex(w http.ResponseWriter, r *http.Request) {if r.URL.Path !="/" { http.NotFound(w, r)return } data :="Welcome to Web Applications written by GO" w.Write([]byte(data))}funchandlerAuthor(w http.ResponseWriter, r *http.Request) { data :="David Winalda" w.Write([]byte(data))}funchandlerProduct(w http.ResponseWriter, r *http.Request) { id := r.URL.Query().Get("id") idNumber, err := strconv.Atoi(id)if err !=nil&& idNumber <1 { http.NotFound(w, r)return } fmt.Fprintf(w, "Product page: %d", idNumber)}funcmain() { http.HandleFunc("/", handlerIndex) http.HandleFunc("/author", handlerAuthor) http.HandleFunc("/product", handlerProduct) port :="localhost:3030" log.Println("Server started at", port) err := http.ListenAndServe(port, nil)if err !=nil { fmt.Println(err.Error()) }}
Sekarang kita coba jalankan program dan mengakses routing query string.