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