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)
}
})
}
}
04 Request Header
06 Response Code
Artikel Terhangat
51. Menggunakan TLS di gRPC Server
07 Jul 2025
50 Protobuf JSON Marshal dan Unmarshal
07 Jul 2025
27 Menulis Skema Mutation di GraphQL
07 Jul 2025
49 Serialisasi dan Deserialisasi Manual
07 Jul 2025
26 Apa Itu Mutation dan Kapan Digunakan?
07 Jul 2025
48 Custom Options di Protobuf
07 Jul 2025

51. Menggunakan TLS di gRPC Server

50 Protobuf JSON Marshal dan Unmarshal

27 Menulis Skema Mutation di GraphQL

49 Serialisasi dan Deserialisasi Manual

26 Apa Itu Mutation dan Kapan Digunakan?
