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: teoría básica, definiciones y casos prácticos simples.
1
¿Cuál es la diferencia entre un array y un slice?
Respuesta
Un array tiene una longitud fija que es parte de su tipo — [3]int y [4]int son tipos distintos. Un slice es una vista sobre un array: un puntero, una longitud y una capacidad. Usarás slices para casi todo; los arrays aparecen principalmente como el storage subyacente que nunca nombras.
2
¿Qué pasa cuando haces append a un slice pasando su capacidad?
Respuesta
Go asigna un nuevo array subyacente más grande, copia los elementos a través y devuelve un slice apuntando al nuevo. El slice viejo sigue apuntando al array viejo — por eso append devuelve un valor que debes asignar. Ignorar el retorno es el bug clásico de principiante, y funciona hasta que se excede la capacidad.
3
¿Qué es el zero value, y por qué Go tiene uno?
Respuesta
Cada tipo tiene un cero usable: 0 para números, "" para strings, nil para punteros, maps y slices. Significa que una variable declarada siempre está inicializada, así que no hay estado indefinido que leer por accidente. La consecuencia práctica es que un struct con zero values sensatos a menudo no necesita constructor.
4
¿Cuál es la diferencia entre un value receiver y un pointer receiver?
Respuesta
Un value receiver recibe una copia, así que las mutaciones no sobreviven a la llamada; un pointer receiver opera sobre el original. Usa un puntero cuando el método muta, o cuando el struct es lo bastante grande como para que copiarlo cueste. Mezclar los dos en un tipo es donde la gente se confunde, porque el method set de T y *T entonces difieren.
5
¿Cómo funciona el manejo de errores, y por qué no hay excepciones?
Respuesta
Los errores son valores ordinarios devueltos junto al resultado y verificados en el call site. Es verboso a propósito: el camino donde algo falla es visible en el código en vez de escondido en un stack unwind. panic existe para situaciones genuinamente irrecuperables, y usarlo para control de flujo es un code smell que cualquier revisor marcará.
6
¿Qué es una goroutine, y en qué se diferencia de un hilo?
Respuesta
Una goroutine es una función programada por el runtime de Go en vez del sistema operativo. Empieza en un par de kilobytes y crece, así que cientos de miles son algo ordinario, donde la misma cantidad de hilos del SO no lo sería. El runtime las multiplexa sobre un pequeño pool de hilos reales.
7
¿Qué hace `defer`, y cuándo corre?
Respuesta
Programa una llamada para cuando la función que la rodea retorna, de cualquier forma que retorne. Eso lo hace el lugar correcto para cerrar un archivo o liberar un mutex, junto a la línea que lo abrió o bloqueó. Los argumentos se evalúan en el statement defer, no en la ejecución — lo que sorprende a quienes difieren algo usando una variable de loop.