0Pricing
Go Academy · Pelajaran

Pengikatan dan Validasi Permintaan

ShouldBindJSON, tag pengikatan, dan validator

Pengikatan dan Validasi Permintaan adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Pengikatan isi badan permintaan

Gin dapat mengikat JSON, XML, data formulir, dan string kueri ke struct Go menggunakan tag struct binding dan fungsi c.ShouldBind*:

type CreateUserRequest struct {
    Name  string `json:"name"  binding:"required"`
    Email string `json:"email" binding:"required,email"`
    Age   int    `json:"age"   binding:"gte=0,lte=150"`
}

func createUser(c *gin.Context) {
    var req CreateUserRequest
    if err := c.ShouldBindJSON(&req); err != nil {
        c.JSON(400, gin.H{"error": err.Error()})
        return
    }
}

ShouldBind dibandingkan dengan MustBind

ShouldBind* mengembalikan error agar dapat Anda tangani. Bind* (varian Must) secara otomatis menulis respons 400 dan membatalkan pemrosesan saat terjadi error — gunakan ShouldBind untuk respons error khusus.

Pengikatan kueri

Ikat parameter string kueri ke struct dengan c.ShouldBindQuery:

type ListRequest struct {
    Page  int `form:"page"  binding:"gte=1"`
    Limit int `form:"limit" binding:"gte=1,lte=100"`
}
var q ListRequest
c.ShouldBindQuery(&q)

Pengikatan parameter jalur

Ikat parameter jalur ke struct dengan c.ShouldBindUri:

type IDParam struct {
    ID int64 `uri:"id" binding:"required,gt=0"`
}
var p IDParam
c.ShouldBindUri(&p)

Tag validasi

Gin menggunakan github.com/go-playground/validator/v10. Tag umum: required, email, min, max, gte, lte, len, oneof.

Validator khusus

Daftarkan fungsi validasi khusus dengan binding.Validator.Engine():

validate := binding.Validator.Engine().(*validator.Validate)
validate.RegisterValidation("username", validateUsername)

Respons error validasi

Uraikan error validator menjadi respons yang mudah dipahami pengguna, lengkap dengan nama bidang dan pesannya:

var ve validator.ValidationErrors
if errors.As(err, &ve) {
    errs := make([]string, len(ve))
    for i, e := range ve {
        errs[i] = fmt.Sprintf("%s: %s", e.Field(), e.Tag())
    }
    c.JSON(400, gin.H{"errors": errs})
}

Berkas formulir multipart

Tangani unggahan berkas dengan c.FormFile:

file, _ := c.FormFile("avatar")
c.SaveUploadedFile(file, "./uploads/"+file.Filename)

Negosiasi Content-Type

ShouldBind milik Gin secara otomatis memilih pengikatan berdasarkan Content-Type (JSON untuk application/json, formulir untuk application/x-www-form-urlencoded).

Ukuran maksimum isi badan permintaan

Batasi ukuran isi badan permintaan untuk mencegah kehabisan memori:

r.MaxMultipartMemory = 8 << 20 // 8 MiB for multipart

Validasi struct bertingkat

Validasi berjalan secara rekursif pada struct bertingkat. Gunakan dive untuk memvalidasi elemen irisan:

Tags []string `json:"tags" binding:"required,dive,min=1,max=30"`

Pemeriksaan Singkat

Apa perbedaan antara c.ShouldBindJSON dan c.BindJSON di Gin?

Ringkasan: Pengikatan Permintaan

Poin utama:

  • ShouldBindJSON/ShouldBindQuery/ShouldBindUri untuk pengikatan bertipe
  • tag binding:"required,email,gte=0" melalui go-playground/validator
  • Validator khusus melalui binding.Validator.Engine()
  • Uraikan ValidationErrors untuk pesan error tingkat bidang

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengikatan dan Validasi Permintaan” gratis?

Ya — teks lengkap “Pengikatan dan Validasi Permintaan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pengikatan dan Validasi Permintaan”?

ShouldBindJSON, tag pengikatan, dan validator Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Pengikatan dan Validasi Permintaan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Router Gin dan Grup Rute
  2. Pengikatan dan Validasi Permintaan
  3. Pembantu Respons dan Kode Status
  4. Middleware Gin: Autentikasi dan Logging
← Kembali ke Go Academy