מבנים הם אחד מסוגי הנתונים העיקריים והפופולריים המסופקים בשפת התכנות Go. חבילות רבות על פני פונקציות שונות, מחבילות מסד נתונים ועד ORMs, וכמה מסגרות אינטרנט משתמשות במבנים לניתוח נתונים קל ופעולות אחרות.
אימות מבנים הוא משימה נפוצה ב-Go, וחבילת ה-Go validator מספקת דרך פשוטה ויעילה לאמת מבנים בפרויקטים שלך.
מהי חבילת ה-Go Validator
ה לך לאימות החבילה מיישמת אימותי ערך עבור struct ושדות בודדים בהתבסס על תגים שצוינו בהצהרת struct.
חבילת ה-Go Validator מספקת תכונות לאימות חוצה שדות וחוצות מבנים באמצעות תגים, פרוסות, מערך ומפות צלילה המאפשרות רמות של אימות שדות רב מימדי, אימות שדות מותאם אישית, חילוץ של שמות שדות מוגדרים בהתאמה אישית, הודעות שגיאה הניתנות להתאמה אישית ותמיכה עבור פופולרי מסגרת ג'ין כמאמת ברירת המחדל עבור החבילה.
הפעל אחת מהפקודות הללו בטרמינל של ספריית העבודה שלך כדי להתקין את מאמת חֲבִילָה.
ללכת קבל gopkg.in/ללכת-playground/validator.v9
ללכת קבל github.com/ללכת-מגרש משחקים/validator/v10
הגרסאות הן הסיומת של כתובת האתר. הפקודה הראשונה מתקינה את גרסה 9, והשנייה מתקינה את גרסה 10 של החבילה.
לאחר התקנת החבילה, תוכל לייבא את החבילה לפרויקטים שלך בהתאם לגרסה שהתקנת.
יְבוּא (
"gopkg.in/go-playground/validator.v9"
)
כעת תוכל להמשיך להשתמש בחבילת ה-Go Validator. אם יש בעיות כלשהן בהתקנה שלך, נסה להתקין מחדש/לשדרג לגרסת Go העדכנית ביותר.
אימות מבנים עם חבילת Validator
תצטרך ליצור מופע של מאמת. לְאַמֵת struct, הגדר את המבנה שברצונך לאמת באמצעות תגי אימות כדי לציין את כללי האימות עבור השדות.
כך תוכל ליצור מופע של מאמת. לְאַמֵת struct.
funcרָאשִׁי() {
לאמת := מאמת. חָדָשׁ()
}
אתה יכול להגדיר מבנה שברצונך לאמת על ידי ציון תגים עבור השדות, ובכך להגדיר כללי אימות. תגי אימות הם הערות מיוחדות של הגדרות שדות struct המציינים את הכללים.
הנה מבנה קבוע לאימות.
סוּג מִשׁתַמֵשׁ struct {
שֵׁם חוּט
גיל int
אימייל חוּט
}
הנה דוגמה למבנה, מוכן לאימות.
סוּג מִשׁתַמֵשׁ struct {
שֵׁם חוּט`לאמת:"נדרש"`
גיל int`validate:"gte=0,lte=130"`
אימייל חוּט`אמת:"נדרש, דוא"ל"`
}
בדוגמה זו ציינת את ה שֵׁם שדה כנדרש במופע, ה גיל השדה חייב להיות גדול או שווה ל-0 וקטן או שווה ל-130, וה- אימייל השדה נדרש וחייבת להיות כתובת דוא"ל חוקית בעת המופע.
תגי אימות שונים זמינים בחבילת ה-Go Validator, כולל תגיות עבור שדות חובה, ערכי מינימום ומקסימום, וכן ביטויים רגולריים. תוכל למצוא רשימה מלאה של תגי האימות הזמינים בתיעוד של חבילת ה-Go Validator.
לאחר שהגדרת את המבנה שברצונך לאמת וציינת את כללי האימות עבור כל שדה, תוכל להשתמש ב- מבנה שיטת ה מאמת. לְאַמֵת struct כדי לאמת את המבנה.
משתמש := משתמש{
// השם לא מופע
גיל: 3990000,
אימייל: "[email protected]",
}
// שים לב שהשדות שם וגיל נכשלים באימות
טעות := לאמת. מבנה (משתמש)
אם טעות != אֶפֶס {
// המבנה לא חוקי
}
ה מבנה השיטה מחזירה שגיאה אם קיימות שגיאות אימות, ותוכל לטפל בשגיאה בהתבסס על הפעולה שלך.
אתה יכול לגשת לשגיאות אלה באמצעות שגיאות אימות שיטת השגיאה.
אם טעות != אֶפֶס {
ל _, טעות := טווח שגיאה (מאמת. ValidationErrors) {
fmt. Println (שגיאה. שדה(), שגיאה. תָג())
}
}
ה שגיאות אימות השיטה תחזיר את השם של כל שדה עם שגיאת אימות ותג האימות שגרם לשגיאה.
תוכל גם להגדיר תגי אימות מותאמים אישית אם דרישות אימות ספציפיות אינן חלק מהתגים המובנים.
אתה יכול להשתמש ב Register Validation שיטת ה מאמת. לְאַמֵת struct. ה Register Validation השיטה לוקחת שני ארגומנטים; שם תג האימות ופונקציית אימות. פונקציית האימות היא פונקציית התקשרות חוזרת שנקראת עבור כל שדה בעל תג האימות המותאם אישית, והפונקציה חייבת לחזור נָכוֹן אם השדה חוקי ו שֶׁקֶר אם אחרת.
הנה דוגמה להגדרה של תג אימות מותאם אישית. התג מאמת שדות למספרים זוגיים.
לְאַמֵת. RegisterValidation("אֲפִילוּ", func(מאמת פל. רמת שדה)bool {
// נסה לקבל את ערך השדה בתור int
ערך, בסדר := fl. Field().Interface().(int)
אם !בסדר {
// אם ערך השדה אינו int, החזר false
לַחֲזוֹרשֶׁקֶר
}
// החזר true אם הערך הוא זוגי, שקר, אחרת
לַחֲזוֹר ערך % 2 == 0
})
הקוד מגדיר תג אימות מותאם אישית אֲפִילוּ משתמש ב Register Validation שיטת ה מאמת. לְאַמֵת struct. הגדרת את תג האימות באמצעות פונקציה שלוקחת ארגומנט יחיד מסוגו מאמת. רמת שדה.
כעת תוכל להשתמש בתג האימות המותאם אישית בהגדרות struct באותו אופן שהיית עושה עבור תגי אימות מובנים.
סוּג MyStruct struct {
ערך int`אמת:"אפילו"`
}
יש עוד מבנים
מבנים הם אזרחים מהשורה הראשונה בגו, ויש כל כך הרבה שאתה יכול לעשות עם מבנים. אם אתה מכיר שפות מונחה עצמים בלבד, אתה יכול להשתמש במבני Go כדי לפעול על נתונים כפי שהיית עושה עם מחלקות.