Desarrollador Go: pregunta de entrevista

¿Cuándo usas channels frente a mutexes?

Usa channels para transferir propiedad o coordinar un flujo de valores; usa un mutex para proteger estado mutable compartido. Los channels no son automáticamente más simples si varias operaciones deben actualizar un invariante de forma atómica.

Respuesta directa

Qué debe cubrir una buena respuesta

Cómo funciona

Los channels expresan transferencia de propiedad y coordinación: un productor entrega valores a un consumidor, un channel done señala finalización, un channel semáforo acota la concurrencia. Un mutex protege un invariante que varias goroutines leen y actualizan en el mismo sitio. La elección sigue el flujo de datos: si el valor se mueve entre etapas, channel; si el valor se queda y se actualiza, lock. Mezclar ambos para una misma estructura compartida suele producir los bugs más difíciles.

Ejemplo

Un pipeline de workers comunica trabajos por channels; un map compartido de contadores suele ser más claro detrás de un mutex. Reescribir el map de contadores como una goroutine dueña que recibe mensajes de incremento es posible, pero añade latencia y una goroutine que cerrar sin ganar claridad.

Errores frecuentes

  • Usar un channel como lock y olvidar que el tamaño del buffer cambia su semántica.
  • Proteger varios campos relacionados con mutexes separados, de modo que el invariante puede verse a medio actualizar.
  • Retener un mutex mientras se envía por un channel, lo que puede bloquear si el receptor necesita el mismo lock.

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.

Practica esta respuesta con MiraHint

Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.

Descargar MiraHint
Preguntas de entrevista para Desarrollador Go