指定依附元件

在 Go 1.11 標準執行階段中執行的應用程式,可以使用任何與 linux/amd64 相容的套件。

使用 Go 模組

我們建議您使用 Go 模組管理 Go 應用程式中的依附元件,但如果您尚未準備好遷移至 Go 模組,可以繼續使用舊版 GOPATH 模式。

部署應用程式時,App Engine 會使用 go build 指令建構應用程式,因此會與 Go 本身的行為相符。如要確保應用程式使用模組感知模式,請在開發環境中執行下列操作:

  • app.yaml 檔案所在的目錄中,建立模組的 go.mod 檔案。App Engine 會搜尋目前目錄,然後依序搜尋上層目錄,直到找到 go.mod 檔案為止

    如果 App Engine 找不到 go.mod 檔案,就會採用 GOPATH 模式。

  • 如果您設定了 GO111MODULE 環境變數,請確認變數值是否已啟用模組感知模式。部署應用程式時,App Engine 會檢查環境中的 GO111MODULE,並比對 Go 本身的行為。只有在您為應用程式加入 go.mod 檔案時,App Engine 才會套用 GO111MODULE 變數設定。

  • 請勿在 $GOPATH/src 中或下方尋找應用程式目錄。如果應用程式位於 $GOPATH/src 目錄樹狀結構中的任何位置,即使您已為應用程式定義 go.mod 檔案,App Engine 仍會採用 GOPATH 模式。

使用私人依附元件

App Engine 無法在建構程序期間下載私有依附元件,因此您必須在部署時將這些元件與應用程式程式碼一併納入。

您需要在 go.mod 檔案中使用 replace 指令,宣告私有依附元件。以下範例假設您的應用程式位於 /myapp/ 目錄中:

  1. 切換至應用程式目錄:

    cd /myapp
    
  2. 建立包含私有依附元件的目錄:

    mkdir private
    

    確認私人依附元件位於 private 目錄。其中一種方法是建立符號連結:

    mkdir private/private.example.com
    ln -s /path/to/private.example.com/foo private/private.example.com/foo
    
  3. 更新 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
    
  4. 請勿修改私有套件的匯入和使用方式。您的 import 陳述式應如下所示:

    import "private.example.com/foo"
    
  5. 部署應用程式,將私人依附元件納入部署作業:

    gcloud app deploy