הצהרת `goto`
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 4 מתוך 68.
הפקודה goto ב-Go מאפשרת לך להעביר את השליטה ישירות לפקודה מסומנת בתווית בתוך אותה פונקציה. אף ש-Go כוללת את האפשרות הזאת, כמעט שלא משתמשים בה בתכנות מודרני ב-Go, משום שמעדיפים מבני בקרה ברורים יותר, כמו לולאות ופקודות if.
כדי להשתמש ב־goto, תחילה מגדירים תווית על ידי כתיבת מזהה ואחריו נקודתיים. לאחר מכן אפשר לקפוץ לתווית הזאת באמצעות goto ואחריו שם התווית.
func main() {
i := 0
start:
fmt.Println("Count:", i)
i++
if i < 3 {
goto start
}
fmt.Println("Done!")
}בדוגמה הזו, התוכנית חוזרת לתווית start עד שהתנאי מפסיק להתקיים. עם זאת, אותה לוגיקה תהיה ברורה הרבה יותר בשימוש בלולאת for. הפקודה goto עלולה להקשות על קריאת הקוד ועל תחזוקתו, ולכן בדרך כלל לא מומלץ להשתמש בה, ומעדיפים זרימת בקרה מובנית.
אתגר
קלבאתגר הזה תתרגלו שימוש במשפט goto כדי ליצור מנגנון פשוט לניסיונות חוזרים. אתם בונים מערכת חיבור שמנסה ליצור חיבור ומנסה שוב מספר מסוים של פעמים אם הניסיון נכשל.
תקבלו שתי קלטים:
- מחרוזת שמייצגת את המספר המרבי של ניסיונות חוזרים (למשל,
"3") - מחרוזת שמייצגת את מספר הניסיון שיצליח (למשל,
"2")
המשימה שלכם היא:
- לנתח את המספר המרבי של הניסיונות החוזרים מהקלט הראשון
- לנתח את מספר הניסיון שיצליח מהקלט השני
- להשתמש במשפט
gotoעם תווית כדי לממש את לוגיקת הניסיונות החוזרים - להתחיל ממספר ניסיון 1 ולהגדיל אותו אחרי כל ניסיון שנכשל
- עבור כל ניסיון שנכשל, להדפיס
"Attempt [attempt_number] failed" - כאשר מספר הניסיון תואם למספר הניסיון שיצליח, להדפיס
"Attempt [attempt_number] succeeded"ולצאת - אם עברתם את המספר המרבי של הניסיונות החוזרים בלי להצליח, להדפיס
"All attempts failed"ולצאת
השתמשו במשפט goto כדי לקפוץ בחזרה לתווית הניסיונות החוזרים כאשר ניסיון נכשל ולא חרגתם ממספר הניסיונות המרבי. מספרי הניסיון צריכים להתחיל מ-1.
נסו בעצמכם
package main
import (
"fmt"
"strconv"
)
func main() {
// קרא את הקלט
var maxRetriesStr string
var successAttemptStr string
fmt.Scanln(&maxRetriesStr)
fmt.Scanln(&successAttemptStr)
// המר את הקלטים למספרים שלמים
maxRetries, _ := strconv.Atoi(maxRetriesStr)
successAttempt, _ := strconv.Atoi(successAttemptStr)
// אתחל את מונה הניסיונות
attempt := 1
// TODO: כתוב את הקוד שלך למטה
// השתמש בפקודת goto עם תווית כדי לממש את לוגיקת הניסיונות החוזרים
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין