0Pricing
Go Academy · บทเรียน

การผูกคำขอและการตรวจสอบ

ShouldBindJSON แท็กการผูกข้อมูล และตัวตรวจสอบ

การผูกคำขอและการตรวจสอบ เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

การผูกข้อมูลเนื้อหาคำขอ

Gin สามารถผูกข้อมูล JSON, XML, ข้อมูลฟอร์ม และสตริงคำค้นเข้ากับโครงสร้าง Go ได้ โดยใช้แท็กโครงสร้าง binding และฟังก์ชัน 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 เทียบกับ MustBind

ShouldBind* ส่งคืนข้อผิดพลาดเพื่อให้จัดการด้วยตนเอง ส่วน Bind* (รูปแบบ Must) จะเขียนการตอบกลับ 400 และยกเลิกการทำงานโดยอัตโนมัติเมื่อเกิดข้อผิดพลาด หากต้องการการตอบกลับข้อผิดพลาดแบบกำหนดเอง ให้ใช้ ShouldBind

การผูกข้อมูลคำค้น

ผูกพารามิเตอร์สตริงคำค้นเข้ากับโครงสร้างด้วย 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)

การผูกข้อมูลพารามิเตอร์เส้นทาง

ผูกพารามิเตอร์เส้นทางเข้ากับโครงสร้างด้วย c.ShouldBindUri:

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

แท็กการตรวจสอบความถูกต้อง

Gin ใช้ github.com/go-playground/validator/v10 แท็กที่ใช้บ่อย ได้แก่ required, email, min, max, gte, lte, len และ oneof

ตัวตรวจสอบความถูกต้องแบบกำหนดเอง

ลงทะเบียนฟังก์ชันตรวจสอบความถูกต้องแบบกำหนดเองด้วย binding.Validator.Engine():

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

การตอบกลับข้อผิดพลาดจากการตรวจสอบความถูกต้อง

แปลงข้อผิดพลาดจากตัวตรวจสอบให้เป็นการตอบกลับที่อ่านเข้าใจง่าย โดยมีชื่อช่องข้อมูลและข้อความ:

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})
}

ไฟล์ฟอร์มแบบหลายส่วน

จัดการการอัปโหลดไฟล์ด้วย c.FormFile:

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

การเจรจาเลือกชนิดเนื้อหา

ShouldBind ของ Gin จะเลือกวิธีผูกข้อมูลตาม Content-Type โดยอัตโนมัติ (ใช้ JSON สำหรับ application/json และใช้ฟอร์มสำหรับ application/x-www-form-urlencoded)

ขนาดเนื้อหาคำขอสูงสุด

จำกัดขนาดเนื้อหาคำขอเพื่อป้องกันการใช้หน่วยความจำจนหมด:

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

การตรวจสอบโครงสร้างซ้อนกัน

การตรวจสอบความถูกต้องจะทำงานแบบเรียกซ้ำกับโครงสร้างที่ซ้อนกัน ใช้ dive เพื่อตรวจสอบสมาชิกของสไลซ์:

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

ตรวจสอบอย่างรวดเร็ว

c.ShouldBindJSON และ c.BindJSON ใน Gin แตกต่างกันอย่างไร

ทบทวน: การผูกข้อมูลคำขอ

ประเด็นสำคัญ:

  • ใช้ ShouldBindJSON/ShouldBindQuery/ShouldBindUri สำหรับการผูกข้อมูลแบบมีชนิด
  • ใช้แท็ก binding:"required,email,gte=0" ผ่าน go-playground/validator
  • ใช้ตัวตรวจสอบแบบกำหนดเองผ่าน binding.Validator.Engine()
  • แปลง ValidationErrors เพื่อสร้างข้อความข้อผิดพลาดระดับช่องข้อมูล

คำถามที่พบบ่อย

บทเรียน “การผูกคำขอและการตรวจสอบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การผูกคำขอและการตรวจสอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การผูกคำขอและการตรวจสอบ”

ShouldBindJSON แท็กการผูกข้อมูล และตัวตรวจสอบ คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การผูกคำขอและการตรวจสอบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เราเตอร์ Gin และกลุ่มเส้นทาง
  2. การผูกคำขอและการตรวจสอบ
  3. ตัวช่วยการตอบกลับและรหัสสถานะ
  4. มิดเดิลแวร์ Gin: การยืนยันตัวตนและการบันทึก
← กลับไปที่ Go Academy