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 dalam 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. Anda dapat terus menggunakan mode GOPATH yang lebih 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 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 mengetahui 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-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 beberapa direktori induk berurutan hingga menemukan file go.mod.

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

  • Jika Anda menetapkan variabel lingkungan GO111MODULE, pastikan nilai variabel mengaktifkan mode module-aware. Saat Anda men-deploy aplikasi, App Engine akan 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 Anda.

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

    Untuk Go 1.13 dan yang lebih baru, App Engine menggunakan mode module-aware secara default, kecuali jika GO111MODULE mengabaikan default atau file go.mod tidak ada dalam 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 direktori bernama vendor di direktori utama aplikasi Anda.

Di Go 1.14 dan yang lebih baru, jika direktori utama aplikasi berisi direktori bernama vendor, perintah go build dan proses deployment App Engine akan menggunakan paket dalam direktori vendor, dan tidak akan 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 setelah deployment.

Gunakan perintah replace dalam file go.mod 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 Anda 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