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 em Go realmente as implementam. A coisa mais importante a entender é que Go usa implementação implícita - não há nenhuma palavra-chave ou declaração especial necessária.

Se um tipo possui todos os métodos que uma interface exige, ele satisfaz automaticamente essa interface. Você não precisa declarar explicitamente que seu tipo implementa a interface - o Go descobre isso para você.

Veja como 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 possui um método Area() que retorna um float64, ele implementa automaticamente a interface Shaper. Não há necessidade de 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 Go incrivelmente flexíveis. Qualquer tipo existente pode satisfazer uma nova interface, desde que possua os métodos necessários, mesmo que a interface tenha sido criada após o tipo ter sido escrito.

quiz iconTeste seus conhecimentos

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

quiz iconTeste seus conhecimentos

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

quiz iconTeste seus conhecimentos

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

challenge icon

Desafio

Fácil

Neste desafio, você praticará a implementação de uma interface criando um sistema de veículos simples. 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 representando a marca do carro (ex: "Toyota")
  • Uma string representando a velocidade do carro em km/h (ex: "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 que retorna 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, em Go, a struct Car implementará automaticamente a interface Vehicle porque possui o método GetInfo() necessário com a assinatura correta. Não há necessidade de declarar explicitamente que Car implementa Vehicle - o Go reconhece esse relacionamento implicitamente.

Folha de consulta

Go utiliza implementação implícita para interfaces - nenhuma palavra-chave ou declaração especial é necessária.

Se um tipo possui todos os métodos que uma interface exige, ele satisfaz automaticamente essa interface:

type Circle struct {
    Radius float64
}

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

Como o Circle possui um método Area() que retorna um float64, ele implementa automaticamente a interface Shaper sem uma declaração explícita.

Essa abordagem implícita torna as interfaces em Go flexíveis - qualquer tipo existente pode satisfazer uma nova interface, desde que possua os métodos exigidos, mesmo que a interface tenha sido criada após o tipo.

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