Apps Artificial Intelligence CSS DevOps Go JavaScript Laravel Linux MongoDB MySQL PHP Python Rust Vue

Validasi Input User di Aplikasi Web dengan Gin dan Go

1 min read .
Validasi Input User di Aplikasi Web dengan Gin dan Go

Kalau bikin aplikasi web, salah satu hal penting yang sering disepelekan adalah validasi input. Tanpa validasi, data yang nyasar atau asal-asalan bisa langsung masuk ke sistem—dan ujung-ujungnya bikin masalah.

Di tulisan ini, saya bikin contoh sederhana bagaimana melakukan validasi input user (misalnya form pendaftaran) dengan framework Gin di Go, plus bantuan paket populer go-playground/validator.

Struktur Proyek

Struktur foldernya sederhana:

project/
│
├── main.go
└── utils/
└── validation.go

1. Setup Aplikasi Gin

Bikin file main.go buat handle request. kita bikin endpoint /register yang terima data JSON, lalu dicek dulu sebelum diproses.

package main

import (
	"net/http"

	"website/utils/validation"

	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
)

// User: data yang bakal divalidasi
type User struct {
	Name     string `json:"name" validate:"required,min=3"`
	Email    string `json:"email" validate:"required,email"`
	Password string `json:"password" validate:"required,min=6"`
}

func main() {
	r := gin.Default()
	r.POST("/register", registerHandler)
	r.Run(":8080")
}

func registerHandler(c *gin.Context) {
	var user User

	if err := c.ShouldBindJSON(&user); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request body"})
		return
	}

	validate := validator.New()
	validationErrors := validation.ValidateStruct(validate, user)
	if len(validationErrors) > 0 {
		c.JSON(http.StatusUnprocessableEntity, gin.H{"errors": validationErrors})
		return
	}

	// Kalau validasi sukses, lanjut proses pendaftaran
	c.JSON(http.StatusOK, gin.H{"message": "Registration successful"})
}

2. Bikin Utility Validasi

Supaya lebih rapih, logika validasi kiata pisah di file utils/validation.go. Di sini kita bisa bikin pesan error yang lebih manusiawi.

package utils

import (
	"fmt"
	"strings"

	"github.com/go-playground/validator/v10"
)

type ValidationError struct {
	Field   string `json:"field"`
	Message string `json:"message"`
}

func ValidateStruct(validate *validator.Validate, data interface{}) []ValidationError {
	var errors []ValidationError

	if err := validate.Struct(data); err != nil {
		for _, err := range err.(validator.ValidationErrors) {
			field := strings.ToLower(err.Field())
			tag := err.Tag()

			var message string
			switch tag {
			case "required":
				message = fmt.Sprintf("%s wajib diisi", field)
			case "min":
				message = fmt.Sprintf("%s minimal %s karakter", field, err.Param())
			case "email":
				message = "format email tidak valid"
			default:
				message = fmt.Sprintf("%s tidak valid (%s)", field, tag)
			}

			errors = append(errors, ValidationError{Field: field, Message: message})
		}
	}

	return errors
}

3. Coba Jalankan

Jalankan aplikasi dengan:

go run main.go

Server jalan di http://localhost:8080. Kalau kita kirim request ke /register tanpa isi semua field, server bakal balikin error JSON yang jelas.

4. Kesimpulan

Dengan Gin + go-playground/validator, validasi input jadi simpel tapi powerful. kita bisa pastikan data user sesuai aturan sebelum lanjut ke proses berikutnya. Pesan error pun bisa disesuaikan biar lebih ramah buat pengguna.

Lihat Juga

chevron-up