延遲套件

import "google.golang.org/appengine/delay"

簡介

套件延遲提供了一種方法,可以藉由工作佇列 API,在使用者要求的範圍外執行程式碼。

如要宣告可能在稍後執行的函式,請在頂層指派 context 中呼叫 Func,為其傳送任意字串鍵值,以及第一個引數的類型屬於 context.Context 的函式。

var laterFunc = delay.Func("key", myFunc)

使用函式文字也是可能的。

var laterFunc = delay.Func("key", func(c context.Context, x string) {
    // ...
})

如要呼叫函式,請叫用函式的 Call 方法。

laterFunc.Call(c, "something")

一個函式可以呼叫無數次。如果函式有任何傳回引數,且最後一個引數的類型為錯誤,函式可能會傳回非零錯誤以通知佇列應對函式進行重試。

函式的引數可以是任何類型,只要能用 gob 套件編碼即可。如果引數類型為介面,那麼用戶端應該負責向 gob 套件註冊可能為該引數傳送的任何實體類型;詳情請參閱 http://golang.org/pkg/gob/#Register

任何在函式初始化或執行期間發生的錯誤,都會記錄在應用程式記錄裡。在初始化期間發生的錯誤記錄會關聯到叫用 Call 方法的要求。

尚未成功執行的函式叫用狀態,會在結合檔案名稱之後保留下來,該檔案名稱中會宣告傳送給 Func 函式的字串鍵值。只要相關函式有結合 (檔案名稱、鍵值) 保留下來,以待處理函式叫用的方式更新應用程式就是安全的。

延遲套件使用 Task Queue API 來建立呼叫保留應用程式路徑「/_ah/queue/go/delay」的工作。 這個路徑不得在 app.yaml 中標記為「login: required」;這個路徑必須標記為「login: admin」,否則就不會受到存取權限制。

索引

type Function
    func Func(key string, i interface{}) *Function
    func (f *Function) Call(c context.Context, args ...interface{}) error
    func (f *Function) Task(args ...interface{}) (*taskqueue.Task, error)

type Function

type Function struct {
    // contains filtered or unexported fields
}

Function 代表一個可能有一個延遲叫用的函式。

func Func

func Func(key string, i interface{}) *Function

Func 會宣告一個新的 Function。第一個引數類型為 context.Context 時,第二個引數必須是函式。這個函式必須在程序初始化時呼叫。這表示必須在全域變數宣告中呼叫,或者從一個初始函式呼叫。這個限制是必要的,因為延遲函式呼叫的實例可能不是執行函式呼叫的那一個實例。只有在程序初始化時執行的程式碼可保證在接收到要求之前由一個實例來執行。

func (*Function) Call

func (f *Function) Call(c context.Context, args ...interface{}) error

Call 會叫用一個延遲函式。

err := f.Call(c, ...)

等於

t, _ := f.Task(...)
_, err := taskqueue.Add(c, t, "")

func (*Function) Task

func (f *Function) Task(args ...interface{}) (*taskqueue.Task, error)

Task 會建立將叫用函式的 Task。 Task 的參數可能在加入佇列之前已經微調過。 使用者不應修改所傳回之 Task 的 Path 或 Payload 欄位。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Go 適用的 App Engine 標準環境