指定依附元件

在 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