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 modeGOPATH
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 filego.mod
di folder yang sama dengan fileapp.yaml
. Untuk mengetahui informasi selengkapnya tentang versi Go, dan mengelola dependensi untuk direktori vendor, lihatGOPATH
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 fileapp.yaml
Anda. App Engine menelusuri direktori saat ini dan beberapa direktori induk berurutan hingga menemukan filego.mod
.Jika App Engine tidak menemukan file
go.mod
, App Engine akan mengikuti modeGOPATH
.Jika Anda menetapkan variabel lingkungan
GO111MODULE
, pastikan nilai variabel mengaktifkan modemodule-aware
. Saat Anda men-deploy aplikasi, App Engine akan memeriksa lingkungan Anda untuk menemukanGO111MODULE
dan mencocokkan perilaku Go itu sendiri. App Engine hanya menerapkan setelan variabelGO111MODULE
jika Anda telah menyertakan filego.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 modeGOPATH
meskipun Anda telah menentukan filego.mod
untuk aplikasi Anda.Untuk Go 1.13 dan yang lebih baru, App Engine menggunakan mode
module-aware
secara default, kecuali jikaGO111MODULE
mengabaikan default atau filego.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/
:
Ubah ke direktori aplikasi Anda:
cd /myapp
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
Update file
go.mod
Anda untuk menggunakan perintahreplace
agar dapat menggunakan direktoriprivate
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
akhirmodule 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
aslimodule private.example.com/myapp require private.example.com/foo v1.2.3
Jangan mengubah cara Anda mengimpor dan menggunakan paket pribadi. Pernyataan
import
Anda akan terlihat seperti ini:import "private.example.com/foo"
Sertakan dependensi pribadi Anda dalam deployment dengan men-deploy aplikasi Anda:
gcloud app deploy