Menu
CoddyTech

Definindo uma Interface

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

Agora que você entende conceitualmente o que são interfaces, vamos aprender como definir uma em Go. Uma interface é definida usando a palavra-chave interface, seguida por um conjunto de assinaturas de métodos entre chaves.

Aqui está a sintaxe básica para definir uma interface:

type InterfaceName interface {
    MethodName() ReturnType
    AnotherMethod(parameter Type) ReturnType
}

Observe que uma interface contém apenas assinaturas de métodos — o nome do método, os parâmetros e os tipos de retorno —, mas nenhuma implementação. A interface não especifica como esses métodos devem funcionar, apenas quais métodos devem existir.

Por exemplo, veja como você definiria uma interface simples Shaper que exige que qualquer tipo que a implemente tenha um método Area:

type Shaper interface {
    Area() float64
}

Esta interface estabelece um contrato: qualquer tipo que queira ser considerado um Shaper deve ter um método Area que não recebe parâmetros e retorna um float64. A interface não se importa com qual é o tipo nem com a forma como ele calcula a área — ela só se importa com a existência do método com a assinatura correta.

challenge icon

Desafio

Fácil

Neste desafio, você vai praticar a definição de interfaces em Go criando um sistema simples de reprodutor de mídia. Você vai definir uma interface que estabelece um contrato para diferentes tipos de dispositivos de mídia.

Você receberá uma entrada:

  • Uma string que representa uma ação de mídia (por exemplo, "play", "pause" ou "stop")

Sua tarefa é:

  1. Definir uma interface chamada MediaPlayer com três assinaturas de método:
    • Play() que retorna uma string
    • Pause() que retorna uma string
    • Stop() que retorna uma string
  2. Com base na ação de entrada, imprimir a assinatura de método correspondente da sua interface MediaPlayer no formato: "MediaPlayer interface requires: [MethodName]() string"

Nada neste programa usa MediaPlayer ainda, e tudo bem: Go compila uma interface mesmo quando nenhum tipo a implementa. As instruções de impressão simplesmente informam a assinatura de método que sua interface exige para a ação fornecida. Na próxima lição, você criará um tipo que implementa MediaPlayer e chamará seus métodos.

Os nomes dos métodos devem começar com letra maiúscula (ser exportados), pois fazem parte de uma definição de interface. Para a entrada "play", imprima "MediaPlayer interface requires: Play() string"; para "pause", imprima "MediaPlayer interface requires: Pause() string"; e para "stop", imprima "MediaPlayer interface requires: Stop() string".

Este desafio se concentra no conceito fundamental de definir interfaces com assinaturas de método, estabelecendo o contrato que qualquer tipo que as implemente deve cumprir.

Experimente você mesmo

package main

import "fmt"

func main() {
    // Leia a entrada
    var action string
    fmt.Scanln(&action)
    
    // TODO: Defina sua interface MediaPlayer aqui
    
    // TODO: Escreva seu código abaixo para processar a ação e imprimir a saída necessária
    
    // Imprima o resultado
    // Lembre-se de imprimir no formato: "MediaPlayer interface requires: [MethodName]() string"
}
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