P
prepair.app
Comenzar entrevista →
EnglishУкраїнськаРусскийDeutsch
🦫

Preguntas de entrevista Golang

Las entrevistas de Go se enfocan en goroutines, channels, interfaces, y manejo de errores — el lenguaje es pequeño, así que las preguntas van a fondo en vez de ir a lo ancho. Aquí están las más comunes con respuestas modelo.

Junior · sin experiencia / menos de 1 añoMiddle · 2–4 años de experienciaSenior · 5+ años de experiencia

Qué preguntan

Goroutines y el scheduler
Channels y select
Interfaces y composición
Manejo de errores
Slices y maps
Context y cancelación

10 preguntas reales con respuestas

Cada pregunta viene con una respuesta modelo con la que puedes comparar la tuya.

1

¿Qué es una goroutine y en qué se diferencia de un hilo del SO?

Respuesta

Una goroutine es una función programada por el runtime de Go en vez del sistema operativo. Empieza con un stack diminuto de un par de kilobytes que crece bajo demanda, mientras que un hilo del SO reserva megabytes, así que un programa puede sostener cientos de miles de goroutines. El runtime las multiplexa sobre un pequeño pool de hilos del SO y cambia en puntos de bloqueo sin un context switch del kernel.

2

¿Cuál es la diferencia entre un channel con buffer y uno sin buffer?

Respuesta

Un channel sin buffer es síncrono: el emisor se bloquea hasta que un receptor está listo, así que también funciona como punto de sincronización. Un channel con buffer acepta hasta su capacidad sin un receptor esperando y solo se bloquea cuando está lleno. Usa sin buffer cuando necesitas garantía de handoff, con buffer para suavizar ráfagas — pero nota que un buffer grande a menudo esconde un problema de diseño en vez de resolverlo.

3

¿Cómo funciona select? ¿Qué pasa si varios cases están listos?

Respuesta

select espera sobre varias operaciones de channel y procede con la que esté lista. Si más de una está lista elige uniformemente al azar, lo que previene la inanición de un solo case. Una cláusula default hace que todo el statement sea no bloqueante, y un select sin ningún case se bloquea para siempre — ocasionalmente usado deliberadamente para aparcar una goroutine.

4

Explica la diferencia entre un slice y un array. ¿Cómo funciona append?

Respuesta

Un array tiene una longitud fija que es parte de su tipo y se copia por valor. Un slice es un header que guarda un puntero a un array subyacente, una longitud, y una capacidad, así que pasarlo copia solo el header. append escribe en capacidad de sobra cuando hay espacio; si no, asigna un array más grande y copia, por eso el slice devuelto puede ya no compartir memoria con el original — y por eso siempre debes asignar el resultado.

5

¿Qué es una interfaz en Go? ¿Por qué se llaman implícitas?

Respuesta

Una interfaz es un conjunto de firmas de métodos; cualquier tipo que tenga esos métodos la satisface sin declararlo. Eso es lo que significa implícito — no hay palabra clave implements, así que puedes definir una interfaz en el paquete consumidor que tipos existentes ya satisfacen. La guía idiomática es mantener las interfaces pequeñas y definirlas donde se usan, no junto a la implementación.

6

¿Cómo manejas errores en Go? ¿Qué es el error wrapping con %w?

Respuesta

Los errores son valores ordinarios devueltos junto al resultado y verificados explícitamente en cada call site. Envolver con fmt.Errorf y el verbo %w preserva el error original dentro de un nuevo mensaje, así que los callers pueden seguir usando errors.Is para probar un valor centinela o errors.As para extraer un error tipado. El wrapping agrega contexto mientras el error viaja hacia arriba manteniéndolo inspeccionable programáticamente.

7

¿Qué es context.Context y por qué se necesita?

Respuesta

Context lleva una señal de cancelación, un deadline, y valores con alcance de request a través de los límites de la API. Cuando un cliente se desconecta o un timeout se dispara, cancelar el context se propaga a cada goroutine derivada de él, así que las consultas de base de datos y llamadas HTTP abortan en vez de quedar colgadas. La convención es pasarlo como el primer parámetro y nunca guardarlo en un struct.

8

¿Qué es defer? ¿En qué orden se ejecutan las llamadas diferidas?

Respuesta

defer programa una llamada para correr cuando la función que la rodea retorna, sin importar por qué camino de retorno o panic llegue ahí. Las llamadas diferidas corren en orden last-in-first-out, así que el defer más reciente se ejecuta primero. Los argumentos se evalúan en el momento en que se escribe defer, no cuando corre — una fuente común de sorpresa al diferir una llamada que captura una variable de loop.

9

¿Cómo evitas las race conditions? ¿Mutex o channels?

Respuesta

Una data race es acceso concurrente no sincronizado donde al menos un lado escribe, y es detectable con la flag -race. Usa sync.Mutex cuando las goroutines comparten un pedazo de estado y simplemente necesitas serializar el acceso a él. Usa channels cuando estás transfiriendo la propiedad de datos entre goroutines — la máxima es compartir memoria comunicándose en vez de comunicarse compartiendo memoria.

10

¿Qué es una interfaz nil y por qué compararla con nil puede sorprenderte?

Respuesta

Un valor de interfaz guarda dos palabras: un tipo y un valor. Es igual a nil solo cuando ambos son nil. Si asignas un puntero nil de un tipo concreto a una interfaz, la palabra de tipo se establece, así que la interfaz es no-nil aunque el puntero subyacente sea nil. Este es el bug clásico donde una función devuelve un *MyError nil como error y el check err != nil del caller pasa inesperadamente.

🦎

Leer respuestas no es suficiente

En una entrevista real hablas bajo presión. Cam hace estas mismas preguntas, evalúa cada respuesta y muestra exactamente qué mejorar.

Practicar entrevista de Go Backend →
Gratis · 3 entrevistas al mes

Vale la pena leer

Todos los artículos →

Otras especializaciones

🔍Manual QA🤖QA AutomationJava Backend🐍Python Backend🐘PHP Backend🟢Node.js Backend💎Ruby on Rails🔷C++🟨JavaScript⚛️React Frontend💚Vue Frontend🅰️Angular FrontendNext.js🍏iOS (Swift)🟩Android (Kotlin)⚙️DevOps / SRE🗄️Data Engineer📈Business Analyst🎯Product Manager📋Project Manager🎨UI/UX Designer📣Marketing