Penundaan paket menyediakan cara untuk mengeksekusi kode di luar cakupan permintaan pengguna menggunakan taskqueue API.
Untuk mendeklarasikan fungsi yang dapat dijalankan nanti, panggil Func dalam konteks penetapan tingkat atas, dengan meneruskan kunci string arbitrer dan fungsi yang argumen pertamanya adalah konteks jenis. Kunci ini digunakan untuk mencari fungsi sehingga dapat dipanggil nanti.
var laterFunc = delay.Func("key", myFunc)
Anda juga dapat menggunakan literal fungsi.
var laterFunc = delay.Func("key", func(c context.Context, x string) { // ... })
Untuk memanggil fungsi, panggil metode Panggilan-nya.
laterFunc.Call(c, "something")
Sebuah fungsi dapat dipanggil beberapa kali. Jika fungsi memiliki argumen return, dan yang terakhir adalah error jenis, fungsi tersebut dapat menampilkan error bukan nil untuk menandakan bahwa fungsi harus dicoba lagi.
Argumen ke fungsi dapat berupa jenis apa pun yang dapat dienkode oleh paket gob. Jika argumen adalah jenis antarmuka, klien bertanggung jawab untuk mendaftar dengan paket gob apa pun jenis konkret yang mungkin diteruskan untuk argumen tersebut; buka http://golang.org/pkg/gob/#Register untuk mengetahui detailnya.
Setiap error selama inisialisasi atau eksekusi fungsi akan dicatat ke log aplikasi. Log error yang terjadi selama inisialisasi akan dikaitkan dengan permintaan yang memanggil metode Panggilan.
Status pemanggilan fungsi yang belum berhasil dieksekusi dipertahankan dengan menggabungkan nama file yang dideklarasikan dengan kunci string yang diteruskan ke fungsi Func. Mengupdate aplikasi dengan pemanggilan fungsi yang tertunda harus aman selama fungsi yang relevan memiliki kombinasi (nama file, kunci) yang dipertahankan. Nama file diurai sesuai dengan aturan berikut:
- Jalur dalam paket utama disingkat hanya menjadi nama file (github.com/foo/foo.go -> foo.go)
- Jalur dihapus hanya menjadi jalur paket (/go/src/github.com/foo/bar.go -> github.com/foo/bar.go)
- Versi modul dihapus (/go/pkg/mod/github.com/foo/bar@v0.0.0-20181026220418-f595d03440dc/baz.go -> github.com/foo/bar/baz.go)
Ada beberapa risiko inheren terjadinya pemanggilan fungsi yang tertunda yang hilang saat dilakukan update yang memuat perubahan besar. Misalnya, beralih dari penggunaan GOPATH ke go.mod adalah perubahan besar yang dapat menyebabkan jalur file berubah secara tidak sengaja.
Paket penundaan menggunakan API Task Queue untuk membuat tugas yang memanggil jalur aplikasi yang dipesan"/_ah/queue/go/delay". Jalur ini tidak boleh ditandai sebagai "login: required" di app.yaml; jalur ini harus ditandai sebagai "login: admin" atau tidak memiliki batasan akses.
Functions
func RequestHeaders
func RequestHeaders(c context.Context) (*taskqueue.RequestHeaders, error)
RequestHeader menampilkan header permintaan HTTP task queue khusus untuk pengendali task queue saat ini. Menampilkan error jika dipanggil dari luar delay.Func.
Fungsi
type Function struct {
// contains filtered or unexported fields
}
Fungsi mewakili fungsi yang mungkin memiliki pemanggilan tertunda.
func Func
Func mendeklarasikan fungsi baru. Argumen kedua harus berupa fungsi dengan argumen pertama konteks.Context. Fungsi ini harus dipanggil pada waktu inisialisasi program. Artinya, fungsi tersebut harus dipanggil dalam deklarasi variabel global atau dari fungsi init. Pembatasan ini diperlukan karena instance yang menunda panggilan fungsi mungkin bukan instance yang mengeksekusinya. Hanya kode yang dieksekusi pada waktu inisialisasi program yang dijamin telah dijalankan oleh instance sebelum menerima permintaan.
Panggilan func (*Fungsi)
Panggilan akan memanggil fungsi yang tertunda.
err := f.Call(c, ...)
setara dengan:
t, _ := f.Task(...)
_, err := taskqueue.Add(c, t, "")
tugas func (*Function)
Tugas membuat Tugas yang akan memanggil fungsi. Parameternya dapat disesuaikan sebelum menambahkannya ke antrean. Pengguna tidak boleh mengubah kolom Jalur atau Payload dari Tugas yang ditampilkan.