Pengenalan Form Post
Sama halnya dengan postingan sebelumnya ketika kita menggunakan method GET maka hasil semua data di form akan menjadi query param sedangkan jika kita menggunakan POST maka semua data di form dikirim via body HTTP Request hanya berbeda methodnya saja. Semua data form post yang dikirim dari client secara otomatis akan disimpan dalam atribut Request.PostFrom
. Namun sebelum kita bisa mengambil data atribut PostForm, kita wajib memanggil method Request.ParseForm()
terlebih dahulu lalu method ini akan digunakan untuk melakukan parsing body. Parsing data tersebut akan menghasilkan data form, jika tidak ada maka akan menyebabkan error pada parsing-nya.
Implementasi
Berikut ini contoh bagaimana kita mengimplementasikan Form Post.
func FormPostHandler(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil {
panic(err)
}
firstName := r.PostForm.Get("first_name")
lastName := r.PostForm.Get("last_name")
fmt.Fprintf(w, "%s %s", firstName, lastName)
}
Lalu bagaimana cara mengujinya apakah handler kita sudah berhasil atau belum? Seperti biasanya kita akan mengujinya dengan menggunakan unit test yang ada pada golang. Coba klik kanan pada fungsi yang sudah kita buat lalu buat unit test dan maka VSCode akan langsung otomatis dibuatkan kerangka unit test-nya. Agar lebih paham lagi bisa lihat lebih lengkap dibawah ini.
func TestFormPostHandler(t *testing.T) {
type args struct {
firstName string
lastName string
}
tests := []struct {
name string
args args
want string
}{
{
name: "set form post param",
args: args{
firstName: "ihsan",
lastName: "arif",
},
want: "ihsan arif",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
requestBody := strings.NewReader(fmt.Sprintf("first_name=%s&last_name=%s", tt.args.firstName, tt.args.lastName))
request := httptest.NewRequest(http.MethodPost, "http://localhost/say", requestBody)
request.Header.Add("Content-Type", "application/x-www-form-urlencoded")
recorder := httptest.NewRecorder()
FormPostHandler(recorder, request)
response := recorder.Result()
body, _ := io.ReadAll(response.Body)
bodyString := string(body)
if !reflect.DeepEqual(bodyString, tt.want) {
t.Errorf("bodyString = %v, want %v", bodyString, tt.want)
}
})
}
}
Membuat Web Golang 04 Request Header
Membuat Web Golang 06 Response Code
Artikel Terhangat
Membuat Web Golang 14 HTML Template Cache
09 Sep 2023
Membuat Web Golang 13 HTML Template Function
09 Sep 2023
Membuat Web Golang 12 HTML Template Layout
09 Sep 2023
Membuat Web Golang 11 HTML Template Action
09 Sep 2023
Membuat Web Golang 10 HTML Template Data
09 Sep 2023
Membuat Web Golang 9 Mengenal HTML Template
09 Sep 2023
Membuat Web Golang 08 Memahami File Server
08 Aug 2023
Membuat Web Golang 07 Memahami Cookie
08 Aug 2023

Membuat Web Golang 14 HTML Template Cache

Membuat Web Golang 13 HTML Template Function

Membuat Web Golang 12 HTML Template Layout

Membuat Web Golang 11 HTML Template Action

Membuat Web Golang 10 HTML Template Data

Membuat Web Golang 9 Mengenal HTML Template

Membuat Web Golang 08 Memahami File Server
