在 Go 1.12 以上標準執行階段中執行的應用程式,可以使用任何與 linux/amd64 相容的套件。
App Engine 要求 Go 程式碼中的所有匯入陳述式都必須指定絕對路徑。例如使用下列指令進行匯入:
import "github.com/example/mypackage"
使用 Go 模組
建議您使用 Go 模組來管理 Go 應用程式中的依附元件。如果您尚未準備好遷移至 Go 模組,可以繼續使用舊版 GOPATH
模式。
自 1.22 以上版本起:
在舊版
GOPATH
模式 (GO111MODULE
=off
) 中,您無法在模組外部使用go get
。詳情請參閱「工具」。Go 建議您使用
go.mod
檔案來管理依附元件。如要在部署期間安裝依附元件,請在app.yaml
檔案所在的資料夾中加入go.mod
檔案。如要進一步瞭解 Go 版本,以及如何管理供應商目錄的依附元件,請參閱「GOPATH
和模組」一文。
部署應用程式時,App Engine 會使用 go build
指令建構應用程式,並與 Go 本身的行為相符。為確保應用程式使用 module-aware
模式,請在開發環境中執行下列操作:
在
app.yaml
檔案所在的目錄中,建立模組的go.mod
檔案。App Engine 會搜尋目前的目錄和後續的父目錄,直到找到go.mod
檔案為止。如果 App Engine 找不到
go.mod
檔案,就會採用GOPATH
模式。如果您設定了
GO111MODULE
環境變數,請確認變數值已啟用module-aware
模式。部署應用程式時,App Engine 會檢查環境是否有GO111MODULE
,並比對 Go 本身的行為。只有在您為應用程式加入go.mod
檔案時,App Engine 才會套用GO111MODULE
變數設定。對於 Go 1.12,請勿在
$GOPATH/src
資料夾中找出應用程式目錄。如果 Go 1.12 應用程式位於$GOPATH/src
目錄樹狀結構中的任何位置,即使您已為應用程式定義go.mod
檔案,App Engine 也會採用GOPATH
模式。對於 Go 1.13 以上版本,App Engine 預設會使用
module-aware
模式,除非GO111MODULE
覆寫預設值,或是應用程式目錄中沒有go.mod
檔案。
供應商依附元件
供應商會將應用程式使用的套件複製到應用程式目錄,而不是在建構程序期間從來源下載模組。Go 提供 go build
指令,可將應用程式所需的套件提供至應用程式根目錄中名為 vendor
的目錄。
在 Go 1.14 以上版本中,如果應用程式的根目錄包含名為 vendor
的目錄,go build
指令和 App Engine 部署程序會使用供應商目錄中的套件,而非下載模組。
在 Go 1.13 以下版本中,您必須將環境設定為使用 GOPATH
模式,才能使用供應商。
使用私人依附元件
App Engine 無法在建構程序期間下載私人依附元件,因此您必須在部署時將依附元件納入應用程式程式碼。
請在 go.mod
檔案中使用 replace
指令,宣告私人依附元件。以下範例假設您的應用程式位於 /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.mod
檔案module 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