Menentukan dependensi

Aplikasi yang berjalan dalam runtime standar Go 1.12+ dapat menggunakan paket apa pun yang kompatibel dengan linux/amd64.

App Engine memerlukan semua pernyataan impor di kode Go Anda untuk menentukan jalur absolut. Misalnya, gunakan:

import "github.com/example/mypackage"

Menggunakan modul Go

Sebaiknya gunakan modul Go untuk mengelola dependensi di aplikasi Go. Anda dapat terus menggunakan mode GOPATH lama jika belum siap untuk bermigrasi ke modul Go.

Mulai Go versi 1.22 dan yang lebih baru:

  • Anda tidak dapat menggunakan go get di luar modul dalam mode GOPATH lama (GO111MODULE=off). Untuk mengetahui informasi selengkapnya, lihat Alat.

  • Go merekomendasikan agar Anda menggunakan file go.mod untuk mengelola dependensi. Untuk menginstal dependensi selama deployment, sertakan file go.mod di folder yang sama dengan file app.yaml. Untuk informasi selengkapnya tentang versi Go, dan mengelola dependensi untuk direktori vendor, lihat GOPATH dan Modul.

Saat Anda men-deploy aplikasi, App Engine menggunakan perintah go build untuk mem-build aplikasi dan mencocokkan perilaku Go itu sendiri. Untuk memastikan bahwa aplikasi Anda menggunakan mode module-aware, lakukan hal berikut di lingkungan pengembangan:

  • Buat file go.mod modul Anda di dalam direktori yang sama dengan file app.yaml Anda. App Engine menelusuri direktori saat ini dan direktori induk berurutan hingga menemukan file go.mod.

    Jika App Engine tidak menemukan file go.mod, file tersebut akan mengikuti mode GOPATH.

  • Jika Anda menetapkan variabel lingkungan GO111MODULE, pastikan nilai variabel tersebut mengaktifkan mode module-aware. Saat Anda men-deploy aplikasi, App Engine memeriksa lingkungan Anda untuk menemukan GO111MODULE dan mencocokkan perilaku Go itu sendiri. App Engine hanya menerapkan setelan variabel GO111MODULE jika Anda telah menyertakan file go.mod untuk aplikasi.

  • Untuk Go 1.12, jangan temukan direktori aplikasi dalam folder $GOPATH/src. Jika aplikasi Go 1.12 Anda ada di mana saja dalam hierarki direktori $GOPATH/src, App Engine akan mengikuti mode GOPATH meskipun Anda telah menentukan file go.mod untuk aplikasi tersebut.

    Untuk Go 1.13 dan yang lebih baru, App Engine menggunakan mode module-aware secara default, kecuali jika GO111MODULE mengganti versi default atau file go.mod tidak ada di direktori aplikasi.

Dependensi vendoring

Vendoring menyalin paket yang digunakan aplikasi Anda ke dalam direktori aplikasi, dan tidak akan mendownload modul dari sumbernya selama proses build. Go menyediakan perintah go build untuk mem-vendor paket yang dibutuhkan aplikasi Anda ke dalam direktori bernama vendor di direktori utama aplikasi Anda.

Di Go 1.14 dan yang lebih baru, jika direktori utama aplikasi Anda berisi direktori bernama vendor, perintah go build dan proses deployment App Engine akan menggunakan paket dalam direktori vendor, bukan mendownload modul.

Di Go 1.13 dan yang lebih lama, vendoring hanya tersedia jika Anda menyiapkan lingkungan untuk menggunakan mode GOPATH.

Menggunakan dependensi pribadi

App Engine tidak dapat mendownload dependensi pribadi Anda selama proses build, sehingga Anda harus menyertakan dependensi dengan kode aplikasi saat deployment.

Gunakan perintah replace di file go.mod Anda untuk mendeklarasikan dependensi pribadi. Contoh berikut mengasumsikan bahwa aplikasi Anda berada di direktori /myapp/:

  1. Ubah ke direktori aplikasi Anda:

    cd /myapp
    
  2. Buat direktori yang berisi dependensi pribadi Anda:

    mkdir private
    

    Pastikan dependensi pribadi Anda berada di direktori private. Salah satu pendekatannya adalah dengan membuat symlink:

    mkdir private/private.example.com
    ln -s /path/to/private.example.com/foo private/private.example.com/foo
    
  3. Update file go.mod Anda untuk menggunakan perintah replace agar dapat menggunakan direktori private untuk dependensi Anda:

    go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
    

    File go.mod Anda sekarang akan terlihat seperti:

    File go.mod akhir

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
    replace private.example.com/foo => ./private/private.example.com/foo
    

    File go.mod asli

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
  4. Jangan mengubah cara mengimpor dan menggunakan paket pribadi. Pernyataan import Anda akan terlihat seperti ini:

    import "private.example.com/foo"
    
  5. Sertakan dependensi pribadi Anda dalam deployment dengan men-deploy aplikasi Anda:

    gcloud app deploy