שיעורי מודול (2/5)
המרות אפס ערך וסוג
ב-Go כל משתנה שהוכרז ללא ערך מפורש מקבל א
ערך אפס: ה"ערך הנייטרלי" מסוגו. זה הבדל עצום
מ-JavaScript, שבו let x; מייצר undefined, או C, איפה אתה מסיים
עם זיכרון זבל. אין undefined, אין UB: רק אפס.
טבלת ערכי האפס
| קטגוריה | הקלד | ערך אפס |
|---|---|---|
| מספרי | int, int64, float32, float64, uint, ... | 0 |
| בוליאנית | bool | false |
| מחרוזת | string | "" (מחרוזת ריקה) |
| מצביע | *T | nil |
| פרוסה / מפה / ערוץ | []T, map[K]V, chan T | nil |
| פונקציה / ממשק | func(...), interface{...} | nil |
| מבנה | T struct{...} | כל השדות בערך האפס שלהם |
var i int // 0
var f float64 // 0
var s string // ""
var b bool // false
var p *int // nil
var nums []int // nil (NB: una slice nil ha len 0 e si può iterare!)המרות הן תמיד מפורשות
בניגוד ל-C, Python או JS, Go לא מקדם אחד אוטומטית
סוג מספרי לאחר: עליך לכתוב type(value).
i := 42
var f float64 = float64(i)
var u uint = uint(i)זה נכון אפילו לסוגים "תואמים" כמו int וint64:
תמיד נדרשת המרה מפורשת.
var a int = 10
var b int64 = int64(a) // obbligatorioהמרה בין מספרים: היזהרו מחיתוך
מעבר מ-float64 ל-int חתוך לכיוון אפס, זה לא
סיבוב:
f := 3.9
i := int(f) // 3, non 4
n := int(-3.9) // -3, non -4מחרוזת ↔ המרת מספר
string(65) לא נותן "65": הוא נותן "A" (הרונה עם הקוד
נקודה 65). עבור מחרוזת ← מספר ולהיפך אתה צריך את strconv
חבילה:
import "strconv"
s := strconv.Itoa(42) // "42"
n, err := strconv.Atoi("42") // 42, nilנסקור אותו לעומק במודול Stdlib.
התור שלך
הכריז על מונה משתנה מסוג int מבלי לאתחל אותו והדפיס אותו. צפוי: 0.
הצג רמז
ללא אתחול המשתנה לוקח את הערך האפס של הטיפוס.
הפתרון זמין לאחר 3 ניסיונות
בהינתן המספר השלם n=10, המר את n ל-float64 וחלק ב-4. הדפס את התוצאה (צפי 2.5).
הצג רמז
ללא ההמרה המפורשת, `n / 4` היא חלוקה של מספר שלם שנותנת 2.
הפתרון זמין לאחר 3 ניסיונות
מה הקוד הזה מדפיס?
f := 3.7
fmt.Println(int(f))לְסַכֵּם
- לכל סוג יש ערך אפס עקבי: אין
undefined, אין UB. - לפרוסה/מפה/chan/func/interface/pointer יש ערך אפס
nil. - המרות מספריות תמיד מפורשות עם
type(value). int(float)קטוע לכיוון אפס; כדי לעגל השתמש ב-math.Round.- עבור מחרוזת מספר ↔ השתמש בחבילה
strconv(לא ליהוק ישיר).