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 conceptualmente qué son las interfaces, aprendamos a definir una en Go. Una interfaz se define usando la palabra clave interface, seguida de un conjunto de firmas de métodos entre llaves.
Esta es 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 no contiene ninguna implementación. La interfaz no especifica cómo deben funcionar estos métodos, solo qué métodos deben existir.
Por ejemplo, así definirías una interfaz sencilla Shaper 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 considerarse 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 ni cómo calcule el área; solo le importa que el método exista con la firma correcta.
Desafío
FácilEn este desafío, practicarás cómo definir interfaces en Go creando un sistema sencillo de reproductor multimedia. Definirás una interfaz que establece un contrato para diferentes tipos de dispositivos multimedia.
Recibirás una entrada:
- Una cadena que representa una acción multimedia (por ejemplo,
"play","pause"o"stop")
Tu tarea es:
- Definir una interfaz llamada
MediaPlayercon tres firmas de métodos:Play()que devuelve una cadenaPause()que devuelve una cadenaStop()que devuelve una cadena
- Según la acción de entrada, imprimir la firma del método correspondiente de tu interfaz
MediaPlayercon el formato:"MediaPlayer interface requires: [MethodName]() string"
Este programa todavía no usa MediaPlayer, y eso está bien: Go compila una interfaz incluso cuando ningún tipo la implementa. Las instrucciones de impresión simplemente informan la firma del método que tu interfaz requiere para la acción dada. En la siguiente lección crearás un tipo que implemente MediaPlayer y llamarás a sus métodos.
Los nombres de los métodos deben escribirse con mayúscula inicial (ser exportados), ya que forman 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étodos, estableciendo el contrato que cualquier tipo que las implemente debe cumplir.
Pruébalo tú mismo
package main
import "fmt"
func main() {
// Lee la entrada
var action string
fmt.Scanln(&action)
// TODO: Define aquí tu interfaz MediaPlayer
// TODO: Escribe tu código a continuación para gestionar la acción e imprimir la salida requerida
// Imprime el resultado
// Recuerda imprimir con 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 comportamientosPractica por tu cuenta: Compilador de Go online