סיכום – שמות משתמש ייחודיים
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 37 מתוך 68.
אתגר
קלבנה מערכת לרישום שמות משתמש שמונעת כפילויות באמצעות האידיומה של Go למערכים אסוציאטיביים המשמשים כקבוצה. האתגר הזה מדגים איך ליצור מערכת חזקה לניהול משתמשים שמבטיחה ייחודיות של שמות משתמש בכל הרישומים.
תקבל שני קלטים:
- מחרוזת שמכילה שמות משתמש קיימים המופרדים בפסיקים (למשל,
"alice123,bob_dev,charlie2024,diana_codes") - מחרוזת שמכילה ניסיונות חדשים לרישום שמות משתמש המופרדים בפסיקים (למשל,
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
עליך:
- ליצור קבוצה באמצעות האידיומה של Go
map[string]struct{}כדי לאחסן שמות משתמש רשומים - לנתח את מחרוזת הקלט הראשונה באמצעות פיצול שלה בפסיקים כדי לקבל את שמות המשתמש הקיימים
- להוסיף כל שם משתמש קיים לקבוצה באמצעות מילולית המבנה הריק
{}בתור הערך - לנתח את מחרוזת הקלט השנייה באמצעות פיצול שלה בפסיקים כדי לקבל ניסיונות רישום חדשים
- לבדוק עבור כל ניסיון רישום אם שם המשתמש כבר קיים בקבוצה באמצעות אידיומת comma ok
- להציג את תהליך הרישום עבור כל ניסיון:
- אם שם המשתמש זמין:
"Registered: [username]"ולהוסיף אותו לקבוצה - אם שם המשתמש כבר קיים:
"Username taken: [username]"
- אם שם המשתמש זמין:
- לאחר עיבוד כל ניסיונות הרישום, להציג סיכום מקיף:
"Registration Summary:""Initial usernames: [initial_count]""Registration attempts: [attempts_count]""Successful registrations: [successful_count]""Rejected (duplicate): [rejected_count]""Total registered usernames: [total_count]"
- לבסוף, לרשום את כל שמות המשתמש הרשומים במערכת:
- כותרת:
"All registered usernames:" - כל שם משתמש בשורה נפרדת:
"@[username]"
- כותרת:
השתמש בחבילה strings כדי לפצל את מחרוזות הקלט בפסיקים. האתגר הזה מדגים איך האידיומה של Go לקבוצה מספקת פתרון יעיל למניעת כפילויות במערכות רישום משתמשים, תוך הבטחת שלמות הנתונים וביצועי חיפוש מהירים לאימות שמות משתמש.
נסו בעצמכם
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
// קראו את הקלט
var existingUsernames string
var newRegistrations string
fmt.Scanln(&existingUsernames)
fmt.Scanln(&newRegistrations)
// פענחו את מחרוזות הקלט
existing := strings.Split(existingUsernames, ",")
attempts := strings.Split(newRegistrations, ",")
// צרו קבוצה בדרך המקובלת ב-Go
userSet := make(map[string]struct{})
// TODO: כתבו את הקוד שלכם למטה
// 1. הוסיפו לקבוצה את שמות המשתמש הקיימים
// 2. עבדו כל ניסיון הרשמה
// 3. הציגו את תוצאות ההרשמה עבור כל ניסיון
// 4. חשבו והציגו את הסיכום
// 5. הציגו את כל שמות המשתמש הרשומים (זכרו למיין כדי להבטיח פלט עקבי)
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאי3ממשקים (הבסיס)
מהו ממשק?הגדרת ממשקמימוש ממשקשימוש בטיפוסי ממשקממשק ריקבדיקות טיפוסמתג טיפוסיםסיכום – צורות והתנהגויות6קבוצות בסגנון המקובל ב-Go
דפוס הקבוצה ב-Goיצירת קבוצההוספה לקבוצהבדיקת חברות בקבוצההסרה מקבוצהמעבר על איברי קבוצהסיכום – שמות משתמש ייחודייםתרגלו בעצמכם: קומפיילר Go אונליין