Paquete google.golang.org/appengine/delay (v1.6.8)

El retraso del paquete proporciona una forma de ejecutar el código fuera del alcance de una solicitud de usuario mediante la API de la lista de tareas en cola.

Para declarar una función que podría ejecutarse más adelante, llama a Func en el contexto de asignación del nivel superior, pásale una clave de string arbitraria y una función cuyo primer argumento sea del tipo context.Context. La clave se usa para buscar la función a fin de que pueda llamarse más tarde.

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

También es posible utilizar una función literal.

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

Para llamar a una función, invoca su método de llamada.

laterFunc.Call(c, "something")

Se la puede llamar varias veces. Si la función tiene argumentos de retorno y el último es un error de tipo, la función podría mostrar un error que no es nulo para mostrarle a la cola que se debería reintentar la función.

Las funciones de los argumentos pueden ser de cualquier tipo codificable por el paquete gob. Si un argumento es un tipo de interfaz, es responsabilidad del cliente registrar con el paquete gob cualquier tipo concreto que se pase para ese argumento. Consulta http://golang.org/pkg/gob/#Register si deseas obtener más información al respecto.

Cualquier error durante la inicialización o ejecución de una función se registrará en los registros de la aplicación. Los registros de errores que ocurran durante la inicialización se asociarán con la solicitud que invocó el método de llamada.

El estado de una invocación de función que todavía no se ejecutó correctamente se preserva mediante la combinación del nombre del archivo en el cual se declaró con la clave de la string que se pasó a la función Func. La actualización de una app con invocaciones de funciones pendientes es segura, siempre y cuando las funciones relevantes tengan la combinación (nombre de archivo, clave) preservada. El nombre del archivo se analiza según estas reglas:

  • Las rutas de los principales del paquete se acortan solo al nombre del archivo (github.com/foo/foo.go -> foo.go).
  • Las rutas se quitan solo de rutas de paquete (/go/src/github.com/foo/bar.go -> github.com/foo/bar.go).
  • Las versiones de los módulos se eliminan (/go/pkg/mod/github.com/foo/bar@v0.0.0-20181026220418-f595d03440dc/baz.go -> github.com/foo/bar/baz.go)

Existe un riesgo inherente a que las invocaciones de funciones pendientes se pierdan durante una actualización que contiene cambios grandes. Por ejemplo, cambiar de usar GOPATH a go.mod es un cambio grande que puede provocar de manera involuntaria que las rutas de acceso de los archivos cambien.

El paquete de demora utiliza la API de lista de tareas en cola a fin de crear tareas que llamen a la ruta de la aplicación reservada "/_ah/queue/go/delay". Esa ruta no debe estar marcada como "login: required" en app.yaml; debe estar marcada como "login: admin" o no tener restricción de acceso.

Funciones

func RequestHeaders

func RequestHeaders(c context.Context) (*taskqueue.RequestHeaders, error)

RequestHeaders muestra los encabezados de solicitud HTTP de la lista de tareas en cola especiales para el controlador de listas de tareas en cola actual. Muestra un error si se llama desde fuera de delay.Func.

Function

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

Function representa una función que puede tener una invocación retrasada.

func Func

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

Func declara una nueva función. El segundo argumento debe ser una función con un primer argumento de tipo context.Context. A esta función se la debe llamar durante la inicialización del programa. Eso significa que se la debe llamar en una declaración de variable global o desde una función init. Esta restricción es necesaria, ya que la instancia que retrase una llamada a una función no podrá ser la que la ejecute. Solamente el código ejecutado durante la inicialización del programa tiene garantizada la ejecución por parte de la instancia antes de recibir una solicitud.

func (*Function) Call

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

La llamada invoca una función retrasada.

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

es equivalente a

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

func (*Function) Task

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

La tarea crea una Tarea que invocará la función. Sus parámetros pueden ajustarse antes de agregarla a una cola. Los usuarios no deberían modificar los campos Ruta o Carga útil de la tarea que se muestra.