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 o que são interfaces conceitualmente, vamos aprender como definir uma na prática em Go. Uma interface é definida usando a palavra-chave interface seguida por um conjunto de assinaturas de método 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, parâmetros e 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 Shaper simples que exige que qualquer tipo implementador 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 ou como ele calcula a área - ela apenas se importa que o método exista com a assinatura correta.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilNeste desafio, você praticará a definição de interfaces em Go criando um sistema simples de player de mídia. Você definirá uma interface que estabelece um contrato para diferentes tipos de dispositivos de mídia.
Você receberá uma entrada:
- Uma string representando uma ação de mídia (ex:
"play","pause", ou"stop")
Sua tarefa é:
- Definir uma interface chamada
MediaPlayercom três assinaturas de método:Play()que retorna uma stringPause()que retorna uma stringStop()que retorna uma string
- Com base na ação de entrada, imprima a assinatura do método correspondente da sua interface
MediaPlayerno formato:"MediaPlayer interface requires: [MethodName]() string"
A instrução de impressão deve refletir sobre a interface que você definiu acima — você está descrevendo qual assinatura de método a interface MediaPlayer exige para a ação fornecida. Pense nisso como seu programa inspecionando e relatando seu próprio contrato de interface.
Os nomes dos métodos devem ser capitalizados (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 foca no conceito fundamental de definir interfaces com assinaturas de método, estabelecendo o contrato que qualquer tipo implementador deve cumprir.
Folha de consulta
Uma interface é definida usando a palavra-chave interface seguida pelas assinaturas dos métodos entre chaves:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Interfaces contêm apenas assinaturas de métodos (nome, parâmetros, tipos de retorno), mas nenhuma implementação:
type Shaper interface {
Area() float64
}Qualquer tipo que implemente todos os métodos de uma interface satisfaz automaticamente o contrato dessa interface.
Experimente você mesmo
package main
import "fmt"
func main() {
// Ler entrada
var action string
fmt.Scanln(&action)
// TODO: Defina sua interface MediaPlayer aqui
// TODO: Escreva seu código abaixo para lidar com a ação e imprimir a saída necessária
// Imprimir o resultado
// Lembre-se de imprimir no formato: "MediaPlayer interface requires: [MethodName]() string"
}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
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos