[GO] Custom Validation ด้วย Go Validator
เกริ่นสักนิดสักหน่อย 😎
Go Validator เป็นไลบรารีที่มีประสิทธิภาพและยืดหยุ่นที่ช่วยให้นักพัฒนาสามารถตรวจสอบข้อมูลในแอปพลิเคชัน Go ได้ง่ายขึ้น ซึ่งในตัว package นั้นมีการ validate หลากหลายให้เลือกใช้ แต่ถึงอย่างนั้น มันก็อาจจะมีบางทีที่เราอยากจะปรับแต่งการ validate บางอย่างของเราเอง วันนี้เราเลยจะมาลองทำ custom validation แบบง่าย ๆ โดยใช้ Go Validator กันดูครับ
มาเริ่มกันเลยครับ
ขั้นแรกตอนแรก เดี๋ยวเราจะมาติดตั้งและเรียกใช้ตัว package Go Validator กันก่อนครับ


ต่อไปเราจะมาลองสร้าง Custom Validation กันนะครับ โดยจะเป็นการสร้าง go function หนึ่งตัว ที่จะส่งเข้าไปให้ go-validator นั้นเช็คความถูกต้อง โดยใน function จะเป็นการ custom ในสิ่งที่เราต้องการจะ validate นั่นเอง

ในตัวอย่างด้านบน เรากำหนดฟังก์ชันการตรวจสอบที่กำหนดเองชื่อ validateCustomName ซึ่งรับค่าในรูปแบบของ validator.FieldLevel ซึ่งให้เราเข้าถึงฟิลด์ที่จะ validate ภายในฟังก์ชัน เราดึงค่าของฟิลด์โดยใช้ fl.Field().String() และนำมาเช็คเงื่อนไขตามที่เราต้องการเอง
ขั้นตอนต่อไป หลังจากเราสร้าง function custom มาแล้วเราจะมา register มันเข้าไป เพื่อให้ go-validator นั้นรู้จักสิ่งที่เราสร้างขึ้นมา

ขึ้นตอนต่อไป เราจะลองมาดูวิธีเรียกใช้ validation ที่เรา custom ขึ้นมานะครับ โดยเราจะทำในขั้นตอนที่เราสร้าง model หรือ struct ขึ้นมานั่นเอง

ในตัวอย่างด้านบน เรากำหนด User struct ที่มีฟิลด์ชื่อ Name เราใช้ตัว custom validation ที่ทำขึ้นมา โดยเพิ่ม customName เข้าไปในแท็ก validate นอกจากนี้ เรายังใช้แท็ก required เพื่อให้แน่ใจว่าฟิลด์ไม่เป็นค่าว่าง
ขั้นตอนสุดท้าย เราจะลองมาดูวิธีเรียกใช้กันครับ

ในโค้ดตัวอย่างด้านบน สร้าง User struct และกำหนดค่าให้กับฟิลด์ Name จากนั้น เราเรียกใช้ v.Struct(user) เพื่อทำการตรวจสอบฟิลด์ด้านใน หากมีข้อผิดพลาดในการตรวจสอบ จะถูกส่งคืนในรูปแบบของ error ของ Go Validator นั่นเอง