Implementar una interfaz
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 14 de 68.
Ahora que sabes cómo definir una interfaz, aprendamos cómo los tipos de Go las implementan realmente. Lo más importante que hay que entender es que Go utiliza la implementación implícita: no se necesita ninguna palabra clave o declaración especial.
Si un tipo tiene todos los métodos que una interfaz requiere, satisface automáticamente esa interfaz. No es necesario declarar explícitamente que su tipo implementa la interfaz; Go lo deduce por usted.
Así es como funciona con la interfaz Shaper de la lección anterior:
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14159 * c.Radius * c.Radius
}Dado que el tipo Circle tiene un método Area() que devuelve un float64, implementa automáticamente la interfaz Shaper. No es necesario declarar esta relación explícitamente: Go la reconoce basándose en la coincidencia de la firma del método.
Este enfoque implícito hace que las interfaces de Go sean increíblemente flexibles. Cualquier tipo existente puede satisfacer una nueva interfaz siempre que tenga los métodos requeridos, incluso si la interfaz fue creada después de que el tipo fuera escrito.
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 implementación de una interfaz creando un sistema de vehículos sencillo. Crearás un struct Car que implementa automáticamente una interfaz Vehicle a través de la implementación implícita de Go.
Recibirás dos entradas:
- Una cadena que representa la marca del coche (por ejemplo,
"Toyota") - Una cadena que representa la velocidad del coche en km/h (por ejemplo,
"120")
Tu tarea es:
- Definir una interfaz
Vehiclecon una firma de método:GetInfo()que devuelva un string - Definir un struct
Carcon dos campos:Brand(string) ySpeed(int) - Implementar el método
GetInfo()para el structCarque devuelva un string con el formato:"Brand: [brand], Speed: [speed] km/h" - Analizar las entradas para crear una instancia de
Car - Llamar al método
GetInfo()e imprimir el resultado
Recuerda que en Go, el struct Car implementará automáticamente la interfaz Vehicle porque tiene el método GetInfo() requerido con la firma correcta. No es necesario declarar explícitamente que Car implementa Vehicle; Go reconoce esta relación de forma implícita.
Hoja de referencia
Go utiliza la implementación implícita para las interfaces; no se necesita ninguna palabra clave o declaración especial.
Si un tipo tiene todos los métodos que requiere una interfaz, satisface automáticamente dicha interfaz:
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14159 * c.Radius * c.Radius
}Dado que Circle tiene un método Area() que devuelve un float64, implementa automáticamente la interfaz Shaper sin una declaración explícita.
Este enfoque implícito hace que las interfaces de Go sean flexibles: cualquier tipo existente puede satisfacer una nueva interfaz siempre que tenga los métodos requeridos, incluso si la interfaz se creó después del tipo.
Pruébalo tú mismo
package main
import (
"fmt"
"strconv"
)
// TODO: 1. Definir la interfaz Vehicle con un método GetInfo() string
// TODO: 2. Definir la estructura Car con los campos Brand (string) y Speed (int)
// TODO: 3. Implementar el método GetInfo() para Car
func main() {
// Leer entrada
var brand string
var speedStr string
fmt.Scanln(&brand)
fmt.Scanln(&speedStr)
// Convertir la cadena de velocidad a entero
speed, _ := strconv.Atoi(speedStr)
// TODO: 4. Crear una instancia de Car usando brand y speed, luego llamar a GetInfo()
result := "" // reemplaza esta línea con tu implementación
_ = brand
_ = speed
// Imprimir el resultado
fmt.Println(result)
}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