Query String
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
:
func handlerProduct(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)
}
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 package strconv
:
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:
package main
import (
"fmt"
"log"
"net/http"
"strconv"
)
func handlerIndex(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))
}
func handlerAuthor(w http.ResponseWriter, r *http.Request) {
data := "David Winalda"
w.Write([]byte(data))
}
func handlerProduct(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)
}
func main() {
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.

Last updated
Was this helpful?