خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

اعتبارسنجی Go Structs با استفاده از Govalidator

اعتبار سنجی ساختار را با استفاده از بسته Govalidator آسانتر کنید.

Structs یکی از انواع داده های اولیه و پرکاربرد است که در زبان برنامه نویسی Go ارائه می شود. بسیاری از بسته‌ها در عملکردهای مختلف، از بسته‌های پایگاه داده گرفته تا ORMها، و برخی چارچوب‌های وب از ساختارهایی برای تجزیه آسان داده‌ها و سایر عملیات استفاده می‌کنند.

اعتبار سنجی ساختار یک کار رایج در Go است و بسته اعتبارسنجی Go یک راه ساده و کارآمد برای اعتبارسنجی ساختارها در پروژه های شما ارائه می دهد.

بسته Go Validator چیست؟

پیش نمایش github برای بسته اعتبارسنجی

بسته اعتبارسنجی Go اعتبارسنجی ارزش را برای فیلدهای ساختاری و تکی بر اساس برچسب های مشخص شده در اعلان ساختار پیاده سازی می کند.

بسته اعتبارسنجی Go ویژگی هایی را برای اعتبار سنجی متقاطع و ساختار متقابل با استفاده از برچسب ها، برش ها، آرایه ها و غواصی در نقشه ارائه می دهد که سطوح اعتبارسنجی میدان های چند بعدی، اعتبارسنجی فیلد سفارشی، استخراج نام های فیلدهای تعریف شده سفارشی، پیام های خطای قابل تنظیم، و پشتیبانی از فریم ورک محبوب Gin به عنوان اعتبارسنجی پیش فرض بسته.

یکی از این دستورات را در ترمینال دایرکتوری کاری خود اجرا کنید تا بسته اعتبارسنجی نصب شود.

go get gopkg.in/go-playground/validator.v9
go get github.com/go-playground/validator/v10

نسخه ها پسوند URL هستند. دستور اول نسخه 9 را نصب می کند و دستور دوم نسخه 10 بسته را نصب می کند.

پس از نصب بسته، بسته به نسخه ای که نصب کرده اید، می توانید بسته را به پروژه های خود وارد کنید.

import (
    "gopkg.in/go-playground/validator.v9"
)

اکنون می توانید به استفاده از بسته اعتبارسنجی Go ادامه دهید. اگر مشکلی در نصب شما وجود دارد، سعی کنید دوباره نصب کنید/به آخرین نسخه Go ارتقا دهید.

مطلب مرتبط:   چگونه کد پایتون خود را همزمان با استفاده از Thread ها اجرا کنید

اعتبارسنجی ساختارها با بسته اعتبارسنجی

شما باید یک نمونه از اعتبار سنجی ایجاد کنید. ساختار اعتبار سنجی، ساختاری را که می خواهید اعتبار سنجی کنید با استفاده از تگ های اعتبار سنجی تعریف کنید تا قوانین اعتبارسنجی فیلدها را مشخص کنید.

در اینجا نحوه ایجاد یک نمونه از ساختار validator.Validate آورده شده است.

func main() {
    validate := validator.New()
}

می‌توانید ساختاری را که می‌خواهید اعتبارسنجی کنید، با تعیین برچسب‌هایی برای فیلدها تعریف کنید، در نتیجه قوانین اعتبارسنجی را تنظیم کنید. تگ های اعتبار سنجی حاشیه نویسی خاصی از تعاریف فیلد ساختار هستند که قوانین را مشخص می کنند.

در اینجا یک ساختار منظم برای اعتبار سنجی وجود دارد.

type User struct {
    Name string
    Age int
    Email string
}

در اینجا نمونه ای از ساختار آماده برای اعتبار سنجی آمده است.

type User struct {
    Name string `validate:"required"`
    Age int`validate:"gte=0,lte=130"`
    Email string `validate:"required,email"`
}

در این مثال، شما فیلد Name را به عنوان مورد نیاز در instantiation مشخص کرده‌اید، فیلد Age باید بزرگ‌تر یا مساوی 0 و کمتر یا برابر با 130 باشد، و فیلد Email الزامی است و باید یک آدرس ایمیل معتبر در نمونه‌سازی باشد.

برچسب‌های اعتبارسنجی متفاوتی در بسته اعتبارسنجی Go موجود است، از جمله برچسب‌های فیلدهای مورد نیاز، مقادیر حداقل و حداکثر و عبارات منظم. می‌توانید فهرست کاملی از برچسب‌های اعتبارسنجی موجود را در اسناد بسته اعتبارسنجی Go بیابید.

هنگامی که ساختاری را که می خواهید اعتبار سنجی کنید تعریف کردید و قوانین اعتبارسنجی را برای هر فیلد مشخص کردید، می توانید از متد Struct ساختار validator.Validate برای اعتبار سنجی ساختار استفاده کنید.

user := User{
    // Name not instantiated
    Age: 3990000,
    Email: "john@example.com",
}
// note that the Name and Age fields fail the validation

err := validate.Struct(user)
if err != nil {
    // Struct is invalid
}

اگر خطاهای اعتبارسنجی وجود داشته باشد، متد Struct یک خطا را برمی‌گرداند و شما می‌توانید بر اساس عملیات خود، خطا را مدیریت کنید.

مطلب مرتبط:   6 منبع تعاملی برای یادگیری Git

با استفاده از روش ValidationErrors خطا می توانید به این خطاها دسترسی پیدا کنید.

if err != nil {
    for _, err := range err.(validator.ValidationErrors) {
        fmt.Println(err.Field(), err.Tag())
    }
}

متد ValidationErrors نام هر فیلد را با یک خطای اعتبارسنجی و برچسب اعتبار سنجی که باعث خطا شده است را برمی گرداند.

خروجی خطا

تعریف تگ های اعتبار سنجی سفارشی

همچنین اگر الزامات اعتبار سنجی خاص بخشی از برچسب های داخلی نیستند، می توانید تگ های اعتبار سنجی سفارشی را تعریف کنید.

می توانید از روش RegisterValidation ساختار validator.Validate استفاده کنید. متد RegisterValidation دو آرگومان می گیرد. نام تگ اعتبارسنجی و یک تابع اعتبارسنجی. تابع اعتبارسنجی یک تابع برگشت به تماس است که برای هر فیلدی که دارای تگ اعتبارسنجی سفارشی است فراخوانی می‌شود و اگر فیلد معتبر باشد، تابع باید true و در غیر این صورت نادرست باشد.

در اینجا یک تعریف مثال از یک برچسب اعتبار سنجی سفارشی آورده شده است. تگ فیلدهای اعداد زوج را تأیید می کند.

validate.RegisterValidation("even", func(fl validator.FieldLevel) bool {
    // Try to get the field value as an int
    value, ok := fl.Field().Interface().(int)
    if !ok {
        // If the field value is not an int, return false
        return false
    }
    // Return true if the value is even, false, otherwise
    return value % 2 == 0
})

کد حتی با استفاده از روش RegisterValidation ساختار validator.Validate یک تگ اعتبارسنجی سفارشی را تعریف می کند. شما تگ اعتبارسنجی را با استفاده از تابعی تعریف کردید که یک آرگومان از نوع validator.FieldLevel را می گیرد.

مطلب مرتبط:   10 بهترین پروژه مبتدی برای برنامه نویسان جدید

اکنون می توانید از تگ اعتبار سنجی سفارشی در تعاریف ساختاری به همان روشی که برای تگ های اعتبار سنجی داخلی استفاده می کنید استفاده کنید.

type MyStruct struct {
    Value int `validate:"even"`
}

سازه‌های بیشتری برای رفتن وجود دارد

سازه ها شهروندان درجه یک در Go هستند و کارهای زیادی می توانید با ساختارها انجام دهید. اگر با زبان‌های کاملاً شی گرا آشنا هستید، می‌توانید از ساختارهای Go برای کار روی داده‌ها مانند کلاس‌ها استفاده کنید.