التحقق من صحة البيانات في Go: نظرة عامة على المكتبات والمناهج

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التحقق من صحة البيانات في Go (Golang): المكتبات والأمثلة العملية



التحقق من صحة البيانات هو أحد الجوانب الرئيسية لتطوير تطبيقات الويب وواجهات برمجة التطبيقات (API) الموثوقة بلغة Go. بدون التحقق الصحيح من البيانات الواردة، يصبح التطبيق عرضة للأخطاء والإدخال غير الصحيح والهجمات. في هذه المقالة، سنستعرض ثلاث مكتبات شائعة للتحقق من الصحة في Go: go-playground/validator و ozzo-validation و govalidator، وسنشرح أمثلة على استخدامها.



لماذا نحتاج إلى التحقق من صحة البيانات في Go؟

Go هي لغة ذات كتابة صارمة، لكن هذا لا يحمي من الأخطاء المنطقية في البيانات: السلاسل الفارغة، عناوين البريد الإلكتروني غير الصحيحة، الأرقام خارج النطاق المسموح به. يتيح التحقق من الصحة ما يلي:

  • ضمان سلامة البيانات عند الإدخال؛
  • تبسيط معالجة الأخطاء؛
  • زيادة أمان التطبيق؛
  • تقليل كمية الكود المتكرر (boilerplate).


1. go-playground/validator — المعيار الذهبي

المكتبة الأكثر شهرة (أكثر من 15 ألف نجمة على GitHub). تسمح بوصف قواعد التحقق مباشرة في وسوم (tags) الهياكل.



التثبيت

go get github.com/go-playground/validator/v10


مثال أساسي

package main

import ( "fmt" "github.com/go-playground/validator/v10")

type User struct { Name string `validate:"required,min=3,max=50"` Email string `validate:"required,email"` Age int `validate:"gte=18,lte=120"`}

func main() { validate := validator.New() user := User{ Name: "A", Email: "invalid-email", Age: 15, } err := validate.Struct(user) if err != nil { for _, err := range err.(validator.ValidationErrors) { fmt.Printf("الحقل: %s, الخطأ: %s", err.Field(), err.Tag()) } }}


المدققون المخصصون

validate.RegisterValidation("is-valid-username", func(fl validator.FieldLevel) bool {    return len(fl.Field().String()) >= 5})

type Login struct { Username string `validate:"required,is-valid-username"`}


2. ozzo-validation — المرونة وسهولة القراءة

تقدم مكتبة ozzo-validation واجهة fluent لبناء القواعد. وهي مناسبة تمامًا لقواعد الأعمال المعقدة.



التثبيت

go get github.com/go-ozzo/ozzo-validation/v4


مثال على الاستخدام

package main

import ( "fmt" validation "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is")

type Order struct { ProductID string Quantity int Email string}

func (o Order) Validate() error { return validation.ValidateStruct(&o, validation.Field(&o.ProductID, validation.Required, validation.Length(5, 20)), validation.Field(&o.Quantity, validation.Required, validation.Min(1), validation.Max(100)), validation.Field(&o.Email, validation.Required, is.Email), )}

func main() { order := Order{ProductID: "AB", Quantity: 0, Email: "bad"} err := order.Validate() if err != nil { fmt.Println(err) }}


الميزات

  • غياب الوسوم — تُكتب القواعد في الكود؛
  • سهولة التكامل مع الأنواع المخصصة؛
  • دعم التحقق الشرطي.


3. govalidator — البساطة للمشاريع الصغيرة

مكتبة خفيفة الوزن تحتوي على مجموعة من الدوال الجاهزة للتحقق من السلاسل والأرقام والهياكل.



التثبيت

go get github.com/asaskevich/govalidator


مثال

package main

import ( "fmt" "github.com/asaskevich/govalidator")

func main() { // التحقق من السلاسل fmt.Println(govalidator.IsEmail("test@example.com")) // true fmt.Println(govalidator.IsURL("https://pythonlib.ru")) // true fmt.Println(govalid

توصيات