Menu
Coddy logo textTech

Implementando uma Interface

Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 14 de 68.

Agora que você sabe como definir uma interface, vamos aprender como os tipos de Go realmente as implementam. O mais importante a entender é que Go usa a implementação implícita — não é necessária nenhuma palavra-chave ou declaração especial.

Se um tipo tiver todos os métodos exigidos por uma interface, ele satisfará automaticamente essa interface. Você não precisa declarar explicitamente que seu tipo implementa a interface — o Go descobre isso para você.

Veja como isso funciona com a interface Shaper da lição anterior:

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

Como o tipo Circle tem um método Area() que retorna um float64, ele implementa automaticamente a interface Shaper. Não é necessário declarar essa relação explicitamente — o Go a reconhece com base na correspondência da assinatura do método.

Essa abordagem implícita torna as interfaces do Go incrivelmente flexíveis. Qualquer tipo existente pode satisfazer uma nova interface desde que tenha os métodos necessários, mesmo que a interface tenha sido criada depois que o tipo foi escrito.

challenge icon

Desafio

Fácil

Neste desafio, você praticará a implementação de uma interface criando um sistema simples de veículos. Você criará uma struct Car que implementa automaticamente uma interface Vehicle por meio da implementação implícita do Go.

Você receberá duas entradas:

  • Uma string que representa a marca do carro (por exemplo, "Toyota")
  • Uma string que representa a velocidade do carro em km/h (por exemplo, "120")

Sua tarefa é:

  1. Definir uma interface Vehicle com uma assinatura de método: GetInfo() que retorna uma string
  2. Definir uma struct Car com dois campos: Brand (string) e Speed (int)
  3. Implementar o método GetInfo() para a struct Car, retornando uma string no formato: "Brand: [brand], Speed: [speed] km/h"
  4. Analisar as entradas para criar uma instância de Car
  5. Chamar o método GetInfo() e imprimir o resultado

Lembre-se de que, no Go, a struct Car implementará automaticamente a interface Vehicle porque possui o método GetInfo() exigido com a assinatura correta. Não é necessário declarar explicitamente que Car implementa Vehicle — o Go reconhece essa relação implicitamente.

Experimente você mesmo

package main

import (
	"fmt"
	"strconv"
)

// TODO: 1. Defina a interface Vehicle com um método GetInfo() string

// TODO: 2. Defina a struct Car com os campos Brand (string) e Speed (int)

// TODO: 3. Implemente o método GetInfo() para Car

func main() {
	// Ler a entrada
	var brand string
	var speedStr string
	fmt.Scanln(&brand)
	fmt.Scanln(&speedStr)

	// Converter a string de velocidade para inteiro
	speed, _ := strconv.Atoi(speedStr)

	// TODO: 4. Crie uma instância de Car usando brand e speed, então chame GetInfo()
	result := "" // substitua esta linha com sua implementação
	_ = brand
	_ = speed

	// Exibir o resultado
	fmt.Println(result)
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo

Pratique por conta própria: Compilador de Go online