בהמשך לפוסט הזה אני מנסה להתחיל לכתוב מדריך מקיף לGO
אני לא יודע כמה זמן אני ישרוד וכמה זה יצא מדריך מקצועי? אבל ננסה.
קודם כל קצת היסטוריה
שפת GO התחילה בשנת 2007, ע"י מפתחי C++ שעבדו בגוגל, והיו מתוסכלים מכמה דברים בשפה:
1.זמן קיפול ארוך (כ45 דקות בפרוייקט שהם עבדו עליו).
2.חוסר תמיכה מספיקה בתכנות אסינכרוני (לא נראה לי שאני צריך להסביר כאן מה זה קוד אסינכרוני).
הם התחילו לעבוד (במימון של גוגל) על שפה חדשה
עם המאפיינים הבאים :
1.קוד שיקומפל לשפת מכונה (ולא ירוץ ע"י מפרש כמו PHP,פייתון וכו').
2.קוד קריא ונוח לעבודה בעבודות צוות.
3.תמיכה בקוד אסינכרוני בעלות נמוכה, ושהקוד ישאר קריא.
4.קימפול מהיר.
5.הם בנו את האיסוף זבל ואת הruntime בצורה שונה מC, אבל אני עדיין לא הבנתי מה הקטע שם (אבל בכל מקרה זה לא משנה למתכנת ברוב המקרים)
הם שיחררו את הפרוייקט באיזור 2009, ובאיטיות זה התחיל לתפוס (בעיקר כי גוגל דחפו את זה )
אבל מה שכנראה הקפיץ את השפה זה דוקר, כשהמנהלים של דוקר חיפשו ב2012 איזה שפה מתאימה לפרוייקט שלהם
הם בחרו בGO אפילו שזה עדיין היה חדש, כי הם חיפשו דווקא שפה חדשה שקל לכתוב בה בצוות ענק בקוד פתוח, ושהיה קוד אסינכרוני קל לניהול, וגם בגלל שהם ראו שאם הם יבחרו שפה ישנה הם יפספסו תמיכה מכל אלו שכותבים בשפה המתחרה
למעשה זה הביא הרבה אנשים להכיר את השפה ולכן היא GO התחילה להיות חזק בשוק מ2015 בערך .
השפה נועדה לשמש בעיקר בצד שרת ( קונטיינרים, כלי CLI,מסדי נתונים, API)
ובשביל צד לקוח אפשר להשתמש או בתבניות HTML של GO או בריאקט, אנגולר וכדו'.
(מעניין שהיום מנסים למשוך את GO לעוד כיוונים כמו:
tinygo משיועד לחומרה קטנה כמו ארדואינו,
gopherjs שמקפל GO לJS (לא ברור מה הקטע בזה אבל זה נושא לשיחה אחרת),
fyne לבניית אפלקציות לשולחן עבודה (ללא תלות באלקטרון וכו'),
יהיה מעניין לראות האם אכן זה אכן יעבור לתחומים נוספים.)
יש כמה קשיים לאלו שמגיעים משפות יותר גבוהות
1.הקומפיילר מחמיר מאוד ולא נותן לקפמל אם יש משתנים שלא בשימוש, וזה יכול הציק בהתחלה, אבל בסופו של יום מרויחים קוד נקי.
2.כמו שאר השפות ה"נמוכות" צריך להגדיר מראש את הסוג של כל משתנה , וכדי להשתמש בו אחר כך כסוג אחר, צריך המרה.
(אני לא יודע בדיוק למה בשפות נמוכות זה עובד ככה, האם בגלל ביצועים או בגלל שטכנית הקומפיילר חייב לדעת מראש מה הסוג של המשתנה?)