Desarrollador Go: pregunta de entrevista
¿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.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
Un valor de interfaz tiene dos palabras: un tipo dinámico y un valor dinámico. Asignar un puntero nil con tipo rellena la palabra de tipo, así que err != nil es verdadero aunque llamar a un método pueda desreferenciar nil. La confusión aparece cuando una función declara un tipo de retorno de interfaz pero construye el resultado desde una variable puntero concreta.
Ejemplo
var p *MyError = nil; var err error = p hace que err != nil. Devuelve una interfaz nil literal cuando no hay error: escribe return nil en vez de return p, o comprueba el puntero concreto antes de convertirlo al tipo de interfaz.
Errores frecuentes
- Devolver un puntero concreto nil a través de un tipo de retorno error.
- Comparar una interfaz con nil para saber si el puntero subyacente es nil.
- Guardar valores nil con tipo en un slice de interfaces y tratarlos como ausentes.
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.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.