Desarrollador Go: pregunta de entrevista
¿Cómo usas context en servicios Go?
context.Context transporta deadlines, cancelación y valores de solicitud entre límites de API. Debe ser el primer parámetro, propagarse en vez de guardarse en una struct y no sustituirse por context.Background dentro del trabajo de la solicitud.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
Un context viaja con la solicitud: lleva el deadline, la señal de cancelación y algunos valores de alcance de solicitud como un ID de traza. Cada capa deriva un context hijo con un deadline más ajustado o una función cancel que posee y difiere. Guardar un context en un struct o pasar context.Background desde el fondo de un handler rompe la cadena: una desconexión del cliente o un timeout ya no detiene el trabajo que inició.
Ejemplo
Cuando se cancela una solicitud HTTP, pasar r.Context() a la base de datos permite detener también la consulta. Una llamada que debe terminar aunque el cliente se vaya, como escribir un registro de auditoría, recibe context.WithoutCancel o un context nuevo con su propio timeout corto.
Errores frecuentes
- Poner datos de negocio en valores del context en lugar de parámetros de función.
- Olvidar llamar a la función cancel que devuelve WithTimeout, lo que fuga el temporizador hasta que dispara.
- Usar un solo context para todo un trabajo por lotes, de modo que un elemento lento cancela a todos los demás.
Una estructura útil para responder
Responde desde tu propia experiencia.
No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.