Un ejemplo de lista de tareas en cola de Go
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En este ejemplo, se crea una app que muestra un formulario HTML. Debes ingresar una string en el cuadro de diálogo y hacer clic en Add
. La app cuenta la cantidad de veces que ingresas una string de esta forma.
La app hace lo siguiente:
- Cuando haces clic en
Add
, el formulario usa una solicitud HTTP POST
para enviar la string a la app que se ejecuta en App Engine. Allí, la app agrupa la string en una tarea y la envía a una cola predeterminada.
- La cola reenvía la tarea a un controlador de tareas incluido, mapeado a la URL
/worker
, que escribe la string de forma asíncrona en un almacén de datos.
- Si envías una solicitud HTTP
GET
, se muestra una lista de las strings que ingresaste y la cantidad de veces que hiciste Add
en cada string. Puedes hacer esto si la escribes o si haces clic en ella en el menú desplegable.
Para implementar esta aplicación en App Engine, haz lo siguiente:
Copia lo siguiente en un archivo llamado queue.yaml
. Esto cambia la velocidad a la que se procesan las tareas de 5 por segundo (la configuración predeterminada) a 3 por segundo.
queue:
- name: default
rate: 3/s
En el mismo directorio, copia lo siguiente en un archivo con el nombre que desees (debe terminar en .go
). Este es el código de la aplicación, incluido el controlador de tareas.
En el mismo directorio, copia lo siguiente en un archivo llamado app.yaml
. Esto configura tu aplicación para App Engine:
Asegúrate de tener preparado un proyecto de Google Cloud Platform con una app de App Engine y de que inicializaste y configuraste el comando de gcloud
para ese proyecto.
Usa el comando gcloud app deploy
para implementar la app en App Engine.
Puedes ver la app en acción mediante el comando gcloud app browse
.
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-09-04 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (UTC)"],[[["\u003cp\u003eThis application counts and displays the number of times a string is entered via an HTML form.\u003c/p\u003e\n"],["\u003cp\u003eWhen a string is added, it's sent to App Engine via an HTTP POST request, bundled into a task, and added to the default queue.\u003c/p\u003e\n"],["\u003cp\u003eThe task queue forwards the task to a worker handler, which then writes the string to a datastore asynchronously.\u003c/p\u003e\n"],["\u003cp\u003eAn HTTP GET request retrieves and displays a list of the entered strings and their corresponding counts.\u003c/p\u003e\n"],["\u003cp\u003eThe application can be deployed to App Engine using specific configuration files and the \u003ccode\u003egcloud\u003c/code\u003e command-line tool.\u003c/p\u003e\n"]]],[],null,["# A Go Task Queue Example\n\nThis example creates an app that displays an HTML form. You enter\na string into the dialog box and click `Add`. The app counts the number of times\nthat you enter any string in this way.\n\nThe app does these things:\n\n- When you click `Add`, the form uses an HTTP `POST`request to send the string to the app which is running on App Engine. There the app bundles the string into a task and sends it to the default queue.\n- The queue forwards the task to an included task handler, mapped to the URL `/worker`, which asynchronously writes the string to a datastore.\n- Sending an HTTP `GET` request displays a list of the strings you have entered and the number of times you have`Add`ed each string, either by typing it or by clicking on it in the dropdown box.\n\nTo deploy this app to App Engine:\n\n1. Copy the following into a file named `queue.yaml`. This changes the rate at\n which tasks will be processed from the default 5 per second to 3 per second.\n\n queue:\n - name: default\n rate: 3/s\n\n2. In the same directory, copy the following into a file named as you like (ending in `.go`). This is the application code, including the task handler.\n\n\n package counter\n\n import (\n \t\"html/template\"\n \t\"net/http\"\n\n \t\"google.golang.org/appengine\"\n \t\"google.golang.org/appengine/datastore\"\n \t\"google.golang.org/appengine/log\"\n \t\"google.golang.org/appengine/taskqueue\"\n )\n\n func init() {\n \thttp.HandleFunc(\"/\", handler)\n \thttp.HandleFunc(\"/worker\", worker)\n }\n\n type Counter struct {\n \tName string\n \tCount int\n }\n\n func handler(w http.ResponseWriter, r *http.Request) {\n \tctx := appengine.NewContext(r)\n \tif name := r.FormValue(\"name\"); name != \"\" {\n \t\tt := taskqueue.NewPOSTTask(\"/worker\", map[string][]string{\"name\": {name}})\n \t\tif _, err := taskqueue.Add(ctx, t, \"\"); err != nil {\n \t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n \t\t\treturn\n \t\t}\n \t}\n \tq := datastore.NewQuery(\"Counter\")\n \tvar counters []Counter\n \tif _, err := q.GetAll(ctx, &counters); err != nil {\n \t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n \t\treturn\n \t}\n \tif err := handlerTemplate.Execute(w, counters); err != nil {\n \t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n \t\treturn\n \t}\n \t// OK\n }\n\n func worker(w http.ResponseWriter, r *http.Request) {\n \tctx := appengine.NewContext(r)\n \tname := r.FormValue(\"name\")\n \tkey := datastore.NewKey(ctx, \"Counter\", name, 0, nil)\n \tvar counter Counter\n \tif err := datastore.https://cloud.google.com/appengine/docs/legacy/standard/go111/reference/latest/datastore.html#google_golang_org_appengine_datastore_Get(ctx, key, &counter); err == datastore.https://cloud.google.com/appengine/docs/legacy/standard/go111/reference/latest/datastore.html#google_golang_org_appengine_datastore_ErrInvalidEntityType_ErrInvalidKey_ErrNoSuchEntity {\n \t\tcounter.Name = name\n \t} else if err != nil {\n \t\tlog.https://cloud.google.com/appengine/docs/legacy/standard/go111/reference/latest/log.html#google_golang_org_appengine_log_Errorf(ctx, \"%v\", err)\n \t\treturn\n \t}\n \tcounter.Count++\n \tif _, err := datastore.Put(ctx, key, &counter); err != nil {\n \t\tlog.https://cloud.google.com/appengine/docs/legacy/standard/go111/reference/latest/log.html#google_golang_org_appengine_log_Errorf(ctx, \"%v\", err)\n \t}\n }\n\n var handlerTemplate = template.Must(template.New(\"handler\").Parse(handlerHTML))\n\n const handlerHTML = `\n {{range .}}\n \u003cp\u003e{{.Name}}: {{.Count}}\u003c/p\u003e\n {{end}}\n \u003cp\u003eStart a new counter:\u003c/p\u003e\n \u003cform action=\"/\" method=\"POST\"\u003e\n \u003cinput type=\"text\" name=\"name\"\u003e\n \u003cinput type=\"submit\" value=\"Add\"\u003e\n \u003c/form\u003e\n `\n\n3. In the same directory, copy the following into a file named `app.yaml`. This configures your\n application for App Engine:\n\n runtime: go\n api_version: go1\n\n handlers:\n - url: /worker/.*\n script: _go_app\n login: admin\n - url: /.*\n script: _go_app\n\n4. Make sure you have a [Google Cloud Platform project with an App Engine app](/appengine/docs/legacy/standard/go111/console)\n prepared and that you have [initialized](/sdk/docs/initializing) and\n configured the `gcloud` command for that project.\n\n5. Use the `gcloud app deploy` command to deploy the app to App Engine.\n\n6. See the app in action by using the `gcloud app browse` command."]]