זמן הריצה של Go

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

גרסאות Go

‫Go 1.26 (תצוגה מקדימה) משתמש בחבילות buildpack. במאמר הזה מופיעה רשימה מלאה של גרסאות Go הנתמכות וגרסאות Ubuntu התואמות להן.

כדי להשתמש בגרסת Go נתמכת, צריך:

  • מתקינים את gcloud CLI בגרסה 420.0.0 ואילך. אפשר לעדכן את כלי ה-CLI על ידי הרצת הפקודה gcloud components update. כדי לראות את הגרסה המותקנת, אפשר להריץ את הפקודה gcloud version.

  • מומלץ להשתמש בקובץ go.mod לניהול יחסי תלות. כדי להתקין תלות במהלך הפריסה, צריך לכלול קובץ go.mod באותה תיקייה שבה נמצא קובץ app.yaml.

    לדוגמה, מבנה התיקיות של האפליקציה עם go.mod צריך לייצג:

    <application-root>/
    --> app.yaml
    --> go.mod
    --> Other source files used in your application.
    
    
  • כדי לציין מערכת הפעלה, צריך לכלול את ההגדרות runtime_config ו-operating_system בקובץ app.yaml.

  • אפשר גם לציין גרסת זמן ריצה על ידי הוספת ההגדרה runtime_version לקובץ app.yaml. כברירת מחדל, נעשה שימוש בגרסה העדכנית ביותר של Go אם לא מציינים את ההגדרה runtime_version.

דוגמאות

  • כדי לציין את Go 1.26 (תצוגה מקדימה) ב-Ubuntu 24:

    runtime: go
    env: flex
    
    runtime_config:
        operating_system: "ubuntu24"
        runtime_version: "1.26"
    
  • כדי לציין את גרסת Go העדכנית ביותר שנתמכת ב-Ubuntu 24:

      runtime: go
      env: flex
    
      runtime_config:
          operating_system: "ubuntu24"
    

האפליקציה שלכם משתמשת בגרסה היציבה העדכנית של הגרסה שצוינה בקובץ app.yaml. ‫App Engine מתעדכן אוטומטית לגרסאות תיקון חדשות, אבל הוא לא מתעדכן אוטומטית לגרסה הראשית.

לדוגמה, יכול להיות שהאפליקציה שלכם נפרסה ב-Go 1.18.10, ומאוחר יותר היא תתעדכן אוטומטית ל-Go 1.18.11, אבל היא לא תתעדכן אוטומטית לגרסה הראשית Go 1.19.

בחירה ב-Go 1.26 (גרסת טרום-השקה) בקובץ app.yaml תגרום לכך שתהיה לכם הגרסה העדכנית ביותר של Go 1.26 (גרסת טרום-השקה) שזמינה.patch

  runtime: go
  env: flex

  runtime_config:
      operating_system: "ubuntu24"
      runtime_version: "1.26"

מידע נוסף זמין במאמר בנושא app.yaml.

גרסאות קודמות של זמן הריצה

כדי להשתמש ב-Go מגרסה 1.15 ומטה, צריך לציין גרסה בהגדרה runtime בפורמט go1.x בקובץ app.yaml. לדוגמה:

  runtime: go1.14
  env: flex

אם לא מציינים גרסה, המערכת תבחר אוטומטית את גרסת ברירת המחדל של go1.11.

האפליקציה שלכם משתמשת בגרסה היציבה העדכנית של הגרסה שצוינה בקובץ app.yaml. ‫App Engine מתעדכן אוטומטית לגרסאות תיקון חדשות, אבל הוא לא מתעדכן אוטומטית לגרסה הראשית.

לדוגמה, יכול להיות שהאפליקציה שלכם נפרסה ב-Go 1.14.10, ומאוחר יותר היא תתעדכן אוטומטית ל-Go 1.14.11, אבל היא לא תתעדכן אוטומטית לגרסה הראשית Go 1.15.

אם בוחרים בגרסת זמן הריצה של Go‏ go1.15 בקובץ app.yaml, המערכת בוחרת בגרסה האחרונה של 1.15 שזמינה, למשל 1.15.15.

  runtime: go1.15
  env: flex

תמיכה בסביבות זמן ריצה אחרות של Go

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

לגבי תמונות בסיס שסופקו על ידי Google או תמונות בסיס של Docker Go, אפשר לעיין במאמר יצירת סביבות ריצה בהתאמה אישית.

ייבוא חבילות

הקוד עובר קומפילציה כשפורסים את האפליקציה ב-App Engine. כשמריצים את פקודת הפריסה, התלויות של האפליקציה נאספות קודם מ-GOPATH המקומי, ואז כולן נשלחות לשרת הבנייה. אם יש תלות חסרה, למשל ספריות של צד שלישי, ה-build ייכשל.

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

הארכת זמן הריצה

הוראות להרחבה ולהתאמה אישית של זמן הריצה של Go זמינות במאמר Go runtime builder on GitHub.

שרת מטא-נתונים

כל מופע של האפליקציה יכול להשתמש בשרת המטא-נתונים של Compute Engine כדי לשלוח שאילתות לגבי המופע, כולל שם המארח, כתובת ה-IP החיצונית, מזהה המופע, מטא-נתונים מותאמים אישית ופרטי חשבון השירות. ב-App Engine אי אפשר להגדיר מטא-נתונים מותאמים אישית לכל מופע, אבל אפשר להגדיר מטא-נתונים מותאמים אישית ברמת הפרויקט ולקרוא אותם מהמופעים של App Engine ו-Compute Engine.

משתמשים בחבילה cloud.google.com/go/compute/metadata כדי לגשת לשרת המטא-נתונים.