מדריך לשפת GO - משתנים ופונקציות

Authors
  • Name
    nigun
    Published on
    Twitter

משתנים

בשונה משפות כמו JS, בהם לא חייבים לציין את סוג המשתנה
בGO הקומפיילר חייב לדעת מראש באיזה סוג משתנה מדובר, ובנוסף אי אפשר לערבב בין סוגים
כך שאם יצרתי משתנה מסוג string (טקסט) גם אם אני שם את הערך "1" אני לא יכול לבצע עליו פעולת חישוב, כי הוא לא מזוהה במספר, לצורך זה אני אצטרך ליצור משתנה חדש מסוג int ולהמיר את המשתנה מה`string.`

כל זה יכול להיות קצת מציק לפעמים, אבל זה חוסך הברה באגים

אז בא נראה קצת קוד

כדי ליצור משתנה ריק, צריך להכריז עליו עם השם + הטיפוס

לדוגמה:

var myname string
בשביל משתנה שיכיל טקסט

var myage int
בשביל משתנה שיכיל מספר

var isTrue bool
בשביל משתנה שיכיל ביטוי בוליאני

זה המשתנים הנפוצים, יש עוד סוגים בשביל מספרים ארוכים, אבל לא נכנס לזה כרגע.

אחרי שמכריזים על משתנה, אפשר להשתמש בו, לדוגמה:

myname = "משה"

כיוון שזה קצת מסרבל כל הזמן להכריז על משתנים
בGO הוסיפו קיצור דרך, בפעם הראשונה שמכילים ערך על משתנה, משתמשים ב := במקום = רגיל
והקומפיילר יוצר משתנה בטיפוס כמו הערך שאותו אנחנו מכילים.

myname := "משה"


אז בא נראה איך זה נראה בפועל:

package main

import (
    "fmt"
)

func main() {
    myname := "משה"
    myname = "אהרון"
    fmt.Println(myname)
}

כשאני יריץ את זה
אני אקבל את הפלט:
אהרון

שימוש לב שאם אני יכריז על הערך פעמיים (עם:=)

myname := "משה"
myname := "אהרון"

אני אקבל את השגיאה

./main.go:9:9: no new variables on left side of :=
כיוון שאי אפשר להכריז על משתנה פעמיים
גם זה חוסך באגים, כי אין מצב שתשתמשו בטעות במשתנה בלי לשים לב שהוא כבר נמצא בשימוש.

שימו לב שאם מכריזים על משתנה חייבים להשתמש בו אחרת הקומפיילר מחזיר:

myVar declared but not used

פונקציות


כמו במשתנים גם בפונקציות צריך להגדיר את סוג המשתנים שרוצים להעביר לפונקציה
וכן את סוג המשתנים שהפונקציה מחזירה.

הנה פונקציה לחיבור שתי מספרים

package main

import "fmt"

func add(x int, y int) int {
  sum := x + y
  return sum
}

func main() {
    sum := add(42, 13)
    fmt.Println(sum)
}

הפונקציה add מקבלת את המשתנים x y ( שימו לב שאחרי כל משתנה אני חייב לציין את סוג המשתנה).
ויכולה להחזיר ערך אחד מסוג int.

ניתן להחזיר גם מספר משתנים מתוך פונקציה
בא נוסיף לפונקציה גם הכפלה של הערכים.

package main

import "fmt"

func addAndMultiply(x int, y int) (int, int) {
    sum := x + y
    multiply := x * y
    return sum, multiply
}

func main() {
    sum, multiply := addAndMultiply(42, 13)
    fmt.Println(sum)
    fmt.Println(multiply)
}

שימו לב כשמחזירים כמה ערכים צריך להכניס אותם לסוגרים.
וכשמקבלים את הערכים חייבים להתייחס אליהם
אם לא מעוניינים להשתמש בכל המשתנים, ניתן לשים _ במקום משתנה
אחרת נקבל שגיאה שיש משתנה שלא בשימוש.

package main

import "fmt"

func addAndMultiply(x int, y int) (int, int) {
    sum := x + y
    multiply := x * y
    return sum, multiply
}

func main() {
    sum, _ := addAndMultiply(42, 13)
    fmt.Println(sum)
}