סיכום - טיימר פשוט
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 65 מתוך 68.
אתגר
קלצרו יישום של טיימר ספירה לאחור שמשתמש ב־time.NewTicker כדי לספור לאחור ממשך זמן מוגדר עד לאפס, ולהציג הודעות התקדמות במרווחי זמן קבועים. האתגר הזה יבחן את היכולת שלכם לשלב טיקרים, לולאות וחישובי משך זמן כדי ליצור יישום תזמון שימושי.
תקבלו שתי קלטים:
- מחרוזת שמכילה את משך הספירה לאחור בפורמט
"value:unit"(למשל,"10:Second"או"3:Minute") - מחרוזת שמכילה את מרווח העדכון בפורמט
"value:unit"(למשל,"1:Second")
המשימה שלכם היא:
- לנתח את הקלט הראשון על ידי פיצול לפי נקודתיים, כדי לחלץ את ערך משך הספירה לאחור ואת היחידה
- לנתח את הקלט השני על ידי פיצול לפי נקודתיים, כדי לחלץ את ערך מרווח העדכון ואת היחידה
- להמיר את ערכי המחרוזת למספרים שלמים באמצעות החבילה
strconv - ליצור אובייקטים מסוג
time.Durationהן עבור משך הספירה לאחור והן עבור מרווח העדכון, באמצעות הקבועים המתאימים:- עבור
"Second": להכפיל ב־time.Second - עבור
"Minute": להכפיל ב־time.Minute - עבור
"Hour": להכפיל ב־time.Hour
- עבור
- להציג את כותרת הטיימר:
"=== COUNTDOWN TIMER ===" - להציג את הגדרת הטיימר:
"Starting countdown from [countdown_duration_object]" - להציג את תדירות העדכונים:
"Updates every [update_interval_object]" - ליצור טיקר באמצעות
time.NewTickerעם משך מרווח העדכון - לאתחל משתנה של זמן שנותר עם משך הספירה לאחור
- להשתמש בלולאה כדי לספור לאחור:
- להמתין לכל אירוע של הטיקר באמצעות
<-ticker.C - להחסיר את מרווח העדכון מהזמן שנותר
- אם הזמן שנותר גדול מ־0, להציג:
"Time remaining: [remaining_time_object]" - אם הזמן שנותר הוא 0 או פחות, להציג:
"Time's up!"ולצאת מהלולאה
- להמתין לכל אירוע של הטיקר באמצעות
- לעצור את הטיקר באמצעות
ticker.Stop() - להציג נתוני סיכום:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(לחשב כמה פעמים הוצג הזמן שנותר)
- להציג את הודעת הסיום:
"Countdown timer finished successfully"
השתמשו בחבילה time עבור פעולות של טיקרים ומשך זמן, בחבילה strings כדי לפצל מחרוזות קלט, בחבילה strconv כדי להמיר מחרוזות למספרים שלמים, ובחבילה fmt עבור הפלט. זכרו ש־time.NewTicker מחזירה טיקר ששולח ערכים בערוץ שלו במרווחי זמן קבועים, ושעליכם לקרוא ל־ticker.Stop() כשתסיימו כדי לשחרר משאבים. האתגר הזה מדגים איך ליצור טיימר ספירה לאחור שימושי באמצעות מנגנוני התזמון של Go.
נסו בעצמכם
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// קרא את הקלט
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// נתח את קלט משך הספירה לאחור
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// נתח את קלט מרווח העדכון
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: כתוב את הקוד שלך למטה
// המר לאובייקטים מסוג time.Duration באמצעות פקודות switch
// צור את טיימר הספירה לאחור (הדמה אותו ללא השהיות בפועל לצורך בדיקה)
// ממש את לולאת הספירה לאחור
// הצג את כל ההודעות והנתונים הסטטיסטיים הנדרשים
// הערה: לצורכי בדיקה, הדמה את פעולת ה-ticker ללא השהיות בזמן אמת
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה7טיפול בשגיאות לעומק
סוגי שגיאות מותאמים אישיתעטיפת שגיאות באמצעות `%w`חילוץ שגיאות באמצעות `errors.Is`חילוץ שגיאות באמצעות `errors.As`הבנת `panic`שימוש ב־`recover`סיכום — חלוקה בטוחה10עבודה עם זמן
קבלת הזמן הנוכחייצירת זמן מסויםעיצוב זמןניתוח מחרוזות זמןמשך זמןחישובים עם זמןהשהיה וטיקריםסיכום - טיימר פשוט2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין