Definir una interfaz
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 13 de 68.
Ahora que entiendes qué son las interfaces conceptualmente, aprendamos cómo definir una realmente en Go. Una interfaz se define utilizando la palabra clave interface seguida de un conjunto de firmas de métodos encerradas entre llaves.
Aquí tienes la sintaxis básica para definir una interfaz:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Observa que una interfaz solo contiene firmas de métodos (el nombre del método, los parámetros y los tipos de retorno), pero ninguna implementación. La interfaz no especifica cómo deben funcionar estos métodos, solo qué métodos deben existir.
Por ejemplo, así es como definirías una interfaz Shaper sencilla que requiere que cualquier tipo que la implemente tenga un método Area:
type Shaper interface {
Area() float64
}Esta interfaz establece un contrato: cualquier tipo que quiera ser considerado un Shaper debe tener un método Area que no reciba parámetros y devuelva un float64. A la interfaz no le importa cuál sea el tipo o cómo calcule el área; solo le importa que el método exista con la firma correcta.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilEn este desafío, practicarás la definición de interfaces en Go creando un sistema de reproductor de medios simple. Definirás una interfaz que establece un contrato para diferentes tipos de dispositivos de medios.
Recibirás una entrada:
- Una cadena que representa una acción de medios (por ejemplo,
"play","pause"o"stop")
Tu tarea es:
- Definir una interfaz llamada
MediaPlayercon tres firmas de método:Play()que devuelve unstringPause()que devuelve unstringStop()que devuelve unstring
- Basándote en la acción de entrada, imprime la firma del método correspondiente de tu interfaz
MediaPlayeren el formato:"MediaPlayer interface requires: [MethodName]() string"
La sentencia de impresión está destinada a reflexionar sobre la interfaz que definiste anteriormente: estás describiendo qué firma de método requiere la interfaz MediaPlayer para la acción dada. Piénsalo como si tu programa estuviera inspeccionando e informando sobre su propio contrato de interfaz.
Los nombres de los métodos deben estar en mayúsculas (exportados) ya que son parte de una definición de interfaz. Para la entrada "play", imprime "MediaPlayer interface requires: Play() string", para "pause" imprime "MediaPlayer interface requires: Pause() string", y para "stop" imprime "MediaPlayer interface requires: Stop() string".
Este desafío se centra en el concepto fundamental de definir interfaces con firmas de método, estableciendo el contrato que cualquier tipo que la implemente debe cumplir.
Hoja de referencia
Una interfaz se define utilizando la palabra clave interface seguida de las firmas de los métodos entre llaves:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Las interfaces contienen solo firmas de métodos (nombre, parámetros, tipos de retorno) pero ninguna implementación:
type Shaper interface {
Area() float64
}Cualquier tipo que implemente todos los métodos de una interfaz cumple automáticamente con el contrato de esa interfaz.
Pruébalo tú mismo
package main
import "fmt"
func main() {
// Leer entrada
var action string
fmt.Scanln(&action)
// TODO: Define tu interfaz MediaPlayer aquí
// TODO: Escribe tu código a continuación para manejar la acción e imprimir la salida requerida
// Imprimir el resultado
// Recuerda imprimir en el formato: "MediaPlayer interface requires: [MethodName]() string"
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientos