Menu
Coddy logo textTech

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.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

challenge icon

Desafío

Fácil

En 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:

  1. Definir una interfaz Vehicle con una firma de método: GetInfo() que devuelva un string
  2. Definir un struct Car con dos campos: Brand (string) y Speed (int)
  3. Implementar el método GetInfo() para el struct Car que devuelva un string con el formato: "Brand: [brand], Speed: [speed] km/h"
  4. Analizar las entradas para crear una instancia de Car
  5. 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)
}
quiz iconPonte a prueba

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