การผูกคำขอและการตรวจสอบ
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เราเตอร์ Gin และกลุ่มเส้นทาง
- การผูกคำขอและการตรวจสอบ
- ตัวช่วยการตอบกลับและรหัสสถานะ
- มิดเดิลแวร์ Gin: การยืนยันตัวตนและการบันทึก