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