Preparación por profesión

Entrevista de Desarrollador Go: preguntas y respuestas.

Interfaces Go y valores nil tipados, goroutines, channels, cancelación y servicios fiables.

Preguntas

Preguntas técnicas para practicar en voz alta

  1. 01

    ¿Cómo funcionan los slices en Go?

    Un slice de Go es un descriptor pequeño con un puntero a un array subyacente, una longitud y una capacidad. No es el array en sí, por lo que dos slices pueden compartir almacenamiento y ver los cambios de elementos del otro.

    Leer el desglose completo
  2. 02

    ¿Por qué las escrituras concurrentes en maps son inseguras en Go?

    Los maps normales de Go no son seguros para escrituras concurrentes. La mutación concurrente puede provocar un panic; protege el map con sync.Mutex o sync.RWMutex, divide la propiedad o usa sync.Map solo si su patrón de acceso encaja.

    Leer el desglose completo
  3. 03

    ¿Por qué una interfaz de Go puede no ser nil con un valor nil?

    Una interfaz es nil solo cuando su tipo dinámico y su valor dinámico son nil. Un puntero nil tipado guardado en una interfaz tiene tipo dinámico, por lo que la interfaz no es nil.

    Leer el desglose completo
  4. 04

    ¿Cómo evitas fugas de goroutines?

    Una fuga de goroutine ocurre cuando una goroutine queda bloqueada para siempre en E/S, un channel, un lock o un timer. Dale cancelación, trabajo acotado y un propietario que espere el cierre.

    Leer el desglose completo
  5. 05

    ¿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.

    Leer el desglose completo
  6. 06

    ¿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.

    Leer el desglose completo
  7. 07

    ¿Cómo diseñas el manejo de errores en Go?

    En Go, los errores son valores de retorno explícitos. Añade contexto con fmt.Errorf y %w, preserva la causa para errors.Is o errors.As y decide en el límite si quien llama puede recuperarse.

    Leer el desglose completo
  8. 08

    ¿Cómo usas interfaces de forma idiomática en Go?

    Mantén las interfaces de Go pequeñas y defínelas del lado consumidor. Describen el comportamiento que necesita quien llama, no una jerarquía de clases ni toda la capacidad de un tipo concreto.

    Leer el desglose completo
  9. 09

    ¿Cómo analizas un servicio Go?

    Haz profiling antes de optimizar. Usa pprof para comparar perfiles de CPU, heap, goroutines, mutex o bloqueos con una línea base y valida el cambio con la misma carga.

    Leer el desglose completo
  10. 10

    ¿Cuál es tu estrategia de testing en Go?

    Las pruebas Go deben cubrir comportamiento en el límite útil más pequeño: pruebas unitarias table-driven para lógica pura, integración para dependencias reales y detección de carreras para código concurrente.

    Leer el desglose completo