אפשר להשתמש בכל חבילה שתואמת ל-Linux/amd64 עם מופעים שפועלים בסביבה הגמישה של App Engine. ההוראות האלה מניחות שאתם משתמשים בפקודה go get כדי לקבל את החבילות ישירות ממאגרים נתמכים, כמו GitHub, Bitbucket, LaunchPad ועוד.
החל מגרסה 1.22 של Go ואילך:
אי אפשר להשתמש ב-
go getמחוץ למודול במצבGOPATHמדור קודם (GO111MODULE=off). למידע נוסף, ראו כלים.מומלץ להשתמש בקובץ
go.modלניהול יחסי תלות. כדי להתקין תלות במהלך הפריסה, צריך לכלול קובץgo.modבאותה תיקייה שבה נמצא קובץapp.yaml. מידע נוסף על גרסאות Go ועל ניהול תלות בספריות ספקים זמין במאמר GOPATH ומודולים.
הצהרה וניהול של יחסי תלות
אפליקציות Go מאורגנות בחבילות שמשקפות את מבנה התיקיות של קובצי המקור. כשמשתמשים בהצהרת ייבוא, הנתיבים היחסיים בייבוא מפורשים. נתיבי ייבוא תקינים הם נתיבים מלאים שמוגדרים ביחס לספריית המשנה src של כל הספריות שצוינו ב-GOPATH.
לדוגמה, נניח שיש אפליקציה שבה מוגדרים הדברים הבאים:
מודול
GOPATH:export GOPATH=/home/fred/go.src1-1.goקובץ:import "foo/bar"ה-CLI של gcloud מחפש את חבילת
foo/barבמיקום/home/fred/go/src/foo/barכשמריצים או פורסים את האפליקציה.
אם כוללים את מקורות החבילה ב-GOPATH, צריך להקפיד לא למקם את קוד המקור בספרייה של האפליקציה שבה נמצא קובץ GOPATH.app.yaml במקרה כזה, יכולות להתרחש בעיות לא בולטות כי יכול להיות שחבילה תיטען פעמיים: פעם אחת עבור הנתיב ביחס לספרייה של שירות, ופעם נוספת עבור הנתיב המלא. כדי למנוע בעיות, ה-CLI של gcloud יסרוק את הספרייה של האפליקציה ואת GOPATH, ואז ידווח על שגיאה אם יזוהה קונפליקט.
כדי לקבל את התוצאות הטובות ביותר, מומלץ:
- יוצרים ספרייה נפרדת בספרייה של האפליקציה לכל שירות.
- הספרייה של כל שירות צריכה להכיל את הקובץ
app.yamlשל השירות ואחד או יותר קבצים מסוג.go. - לא כוללים ספריות משנה בספרייה של שירות.
- בקובץ
GOPATHצריך לציין ספרייה שנמצאת מחוץ לספרייה של האפליקציה, והיא צריכה להכיל את כל יחסי התלות שהאפליקציה מייבאת.
הורדת החבילות הנדרשות
אפשר להשתמש בפקודה go get כדי להוריד חבילות. לדוגמה, כדי להוריד את packagename מ-GitHub my_repo:
go get github.com/my_repo/packagename
פריסה ב-App Engine
כדי לפרוס את האפליקציה ב-App Engine, צריך לפרוס את הספריות שנדרשות לאפליקציה יחד עם קוד האפליקציה. פרטים מלאים זמינים במאמר בנושא בדיקה ופריסה של האפליקציה.