מדריך לשפת GO - הקדמה

הקדמה למדריך שפת Go

Authors
  • Name
    nigun
    Published on
    Twitter

קודם כל קצת היסטוריה

שפת GO התחילה בשנת 2007, ע"י מפתחי C++ שעבדו בגוגל, הם היו מתוסכלים מכמה דברים בשפה:

  1. זמן קימפול ארוך (כ45 דקות בפרוייקט שהם עבדו עליו).
  2. חוסר תמיכה מספיקה בקוד אסינכרוני.

הם התחילו לעבוד (במימון של גוגל) על שפה חדשה עם המאפיינים הבאים :

  1. קוד שיקומפל לשפת מכונה (ולא ירוץ ע"י מפרש כמו PHP, פייתון וכו').
  2. קוד קריא ונוח לעבודה בעבודות צוות.
  3. תמיכה טובה בקוד אסינכרוני, ושהקוד ישאר קריא.
  4. קימפול מהיר.
  5. GC מודרני שמנוהל ע"י השפה, כך שהמתכנת לא צריך לנהל את הזיכרון, וכך נמנעים מדליפות זיכרון ודומה.
  6. שפה מינמאלית ופשוטה, לכן היא לא מונחית עצמים, הפילסופיה היא שגם אם לפעמים זה יגרום לכתוב עוד כמה שורות קוד, העיקר שהקוד יהיה נוח לקריאה.

הם שחררו את הפרוייקט באיזור 2009, ובאיטיות זה התחיל לתפוס (בעיקר כי גוגל דחפו את זה )
אבל מה שכנראה הקפיץ את השפה זה דוקר, כשהמנהלים של דוקר חיפשו ב2012 איזה שפה מתאימה לפרוייקט שלהם הם בחרו בGO למרות שזו היתה עדיין שפה חדשה, וזאת מכיון שהם חיפשו דווקא שפה חדשה שקל לכתוב בה בצוות ענק בקוד פתוח, ושתהיה בעלת קוד אסינכרוני, בנוסף הם הבינו שאם הם יבחרו שפה ישנה, הם יפספסו תמיכה מכל אלו שכותבים בשפה המתחרה. למעשה ניתן לומר שזה הביא לכך שאנשים רבים יכירו את השפה.

אחר כך הגיע קוברטניס שגם הם היו צריכים קוד שמתאים לפרוייקט ענק, ושיהיה מהיר ויציב, ונראה שלכן GO תפס הרבה בכלים לענן (terraform ועוד)

אז למה זה מתאים?

השפה נועדה לשמש בעיקר בצד שרת (קונטיינרים, כלי CLI, מסדי נתונים, API)
בשביל צד לקוח אפשר להשתמש או בתבניות HTML של GO או בריאקט, אנגולר וכדו'.

יש ספריות שמיועדות לעוד אזורים כמו:
tinygo לחומרה (כמו ארדואינו)
gopherjs שמקפל GO לJS (לא ברור מה הקטע בזה),
fyne לבניית אפליקציות לשולחן עבודה/מובייל (זה ממש מצייר את הGUI ללא תלות כמעט בפלטפורמה),
אבל אלו טרנדים נקודתיים ולא נמצאים בשימוש כל כך.

כאחד שהגיע מכתיבה בשפת PHP, היו לי כמה קשיים בהתחלה, אבל בסוף הכל שווה:

  1. הקומפיילר "מחמיר" ולא נותן לקפמל אם יש משתנים שלא בשימוש, וזה יכול הציק בהתחלה, אבל בסופו של יום מרויחים קוד נקי.
  2. כמו שאר השפות ה"נמוכות" צריך להגדיר מראש את הסוג של כל משתנה , וכדי להשתמש בו אחר כך כסוג אחר, צריך המרה.
  3. כשרוצים לרנדר דף דינאמי, לא כל כך נוח לעשות את זה מתוך הקוד
    אלא צריך להשתמש בטמפלייט, בהתחלה זה קצת הציק, אבל בטווח הארוך הקוד יותר מסודר.