אפליקציות שפועלות בסביבת זמן ריצה רגילה של Go 1.12 ומעלה יכולות להשתמש בכל חבילה שתואמת ל-linux/amd64.
ב-App Engine, כל הצהרות הייבוא בקוד Go צריכות לציין נתיבים מוחלטים. לדוגמה, אפשר להשתמש ב:
import "github.com/example/mypackage"
שימוש במודולים של Go
אנחנו ממליצים להשתמש במודולים של Go כדי לנהל את יחסי התלות באפליקציה שלכם ב-Go. אתם יכולים להמשיך להשתמש במצב GOPATH הישן יותר אם אתם לא מוכנים לעבור למודולים של Go.
החל מ-Go בגרסה 1.22 ואילך:
אי אפשר להשתמש ב-
go getמחוץ למודול במצבGOPATHמדור קודם (GO111MODULE=off). למידע נוסף, ראו כלים.מומלץ להשתמש בקובץ
go.modלניהול יחסי תלות. כדי להתקין תלות במהלך הפריסה, צריך לכלול קובץgo.modבאותה תיקייה שבה נמצא קובץapp.yaml. מידע נוסף על גרסאות Go ועל ניהול תלות בספריות ספקים זמין במאמריםGOPATHומודולים.
כשפורסים את האפליקציה, App Engine משתמש בפקודה go build כדי ליצור את האפליקציה, והתהליך הזה תואם להתנהגות של Go. כדי לוודא שהאפליקציה שלכם משתמשת במצב module-aware, צריך לבצע את הפעולות הבאות בסביבת הפיתוח:
יוצרים את קובץ
go.modשל המודול באותה ספרייה שבה נמצא קובץapp.yaml. App Engine מחפש בספרייה הנוכחית ובספריות האב העוקבות עד שהוא מוצא קובץgo.mod.אם App Engine לא מוצא קובץ
go.mod, הוא פועל במצבGOPATH.אם מגדירים את משתנה הסביבה
GO111MODULE, צריך לוודא שהערך של המשתנה מאפשר מצבmodule-aware. כשפורסים את האפליקציה, App Engine בודק את הסביבה שלכם כדי לאתר אתGO111MODULE, וההתנהגות שלו תואמת להתנהגות של Go. App Engine מחיל את הגדרת המשתנהGO111MODULEרק אם כללתם קובץgo.modלאפליקציה.ב-Go 1.12, אל תאתרו את ספריית האפליקציה בתיקייה
$GOPATH/src. אם אפליקציית Go 1.12 שלכם נמצאת איפשהו בעץ התיקיות$GOPATH/src, App Engine פועל במצבGOPATHגם אם הגדרתם קובץgo.modלאפליקציה.ב-Go 1.13 ואילך, App Engine משתמש במצב
module-awareכברירת מחדל, אלא אםGO111MODULEמבטל את ברירת המחדל או שקובץgo.modלא קיים בספריית האפליקציה.
יחסי תלות של יצירת עותק מקוד של צד שלישי (vendoring)
בתהליך של יצירת עותק מקוד של צד שלישי (vendoring) מעתיקים את החבילות שהאפליקציה שלכם משתמשת בהן לספריית האפליקציות, במקום להוריד מודולים מהמקור שלהם בזמן תהליך ה-build. Go מספקת את הפקודה go build כדי ליצור עותק מקוד של צד שלישי (vendoring) של החבילות שהאפליקציה צריכה לספרייה בשם vendor בתיקיית השורש של האפליקציה.
ב-Go 1.14 ואילך, אם תיקיית השורש של האפליקציה מכילה ספרייה בשם vendor, הפקודה go build ותהליך הפריסה של App Engine משתמשים בחבילות שבספריית הספקים במקום להוריד מודולים.
ב-Go 1.13 ובגרסאות קודמות, אפשר להשתמש ב-vendoring רק אם מגדירים את הסביבה לשימוש במצב GOPATH.
שימוש בתלות פרטית
App Engine לא יכול להוריד את התלות הפרטית שלכם במהלך תהליך הבנייה, לכן אתם צריכים לכלול את התלות בקוד האפליקציה בזמן הפריסה.
כדי להצהיר על יחסי תלות פרטיים, משתמשים בהנחיית replace בקובץ go.mod. בדוגמה הבאה נניח שהאפליקציה נמצאת בספרייה /myapp/:
עוברים לספרייה של האפליקציה:
cd /myappיוצרים ספרייה שמכילה את התלות הפרטית:
mkdir privateמוודאים שהתלות הפרטית נמצאת בספרייה
private. אחת הגישות היא ליצור קישור סמלי:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/fooצריך לעדכן את הקובץ
go.modכדי להשתמש בהנחיהreplaceולהשתמש בספרייהprivateבשביל התלות:go mod edit -replace=private.example.com/foo=./private/private.example.com/fooקובץ
go.modאמור להיראות עכשיו כך:קובץ סופי
go.modmodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/fooקובץ
go.modמקוריmodule private.example.com/myapp require private.example.com/foo v1.2.3אל תשנו את האופן שבו אתם מייבאים את החבילה הפרטית ומשתמשים בה. ההצהרה
importאמורה להיראות כך:import "private.example.com/foo"כדי לכלול את התלות הפרטית בפריסה, פורסים את האפליקציה:
gcloud app deploy