Aula 61
Como Implementar uma Interface na Linguagem Golang - Aula de Go
Summary
# Resumo da Aula sobre Interfaces em Go
Na aula, foi explorado o conceito de interfaces na linguagem Go, especificamente a interface chamada `geométrica`. Esta interface contém apenas uma assinatura de método chamada `área`, que é utilizada para calcular a área da forma geométrica e retorna um valor do tipo `float64`.
## Formas Geométricas Definidas
Duas formas foram definidas:
1. **Quadrado**
- Propriedade: `lado` (tipo `float64`)
- Método `área`: Calcula a área retornando `lado * lado`.
2. **Círculo**
- Propriedade: `raio` (tipo `float64`)
- Método `área`: Calcula a área utilizando a fórmula `π * raio²`.
A implementação da interface `geométrica` em Go é implícita; não é necessário declarar explicitamente que um tipo implementa uma interface.
## Implementação do Método Área
Para definir o método `área` para o tipo `quadrado`, o código será o seguinte:
```go
func (q quadrado) área() float64 {
return q.lado * q.lado
}
Isso fará com que o tipo quadrado
implemente automaticamente a interface geométrica
.
Exemplo Prático no Main
No main
, uma variável do tipo geométrica
é definida:
var g geométrico
Um quadrado é criado e atribuído à variável g
, que é do tipo interface:
g = quadrado{lado: 3}
A área do quadrado é então impressa usando fmt.Println
ou fmt.Printf
. Lembre-se de importar o pacote fmt
.
Erros Encontrados
Durante a implementação, foram encontrados alguns erros:
- O tipo de retorno do método
área
não estava definido corretamente, levando a um erro de "muitos argumentos a retornar". - Um erro relacionado ao campo
lado
foi reportado, indicando que o tipogeométrica
não possui campo ou métodolado
porque a interface não o expõe.
Esses erros serviram como aprendizado em debugs e na importância de definições corretas na assinatura dos métodos.
Video Transcript
Estamos de volta, vamos continuar a nossa aprendizado de interfaces na linguagem go.
Continuando aqui em interfaces, nós definimos a interface chamada geométrica.
Essa interface tem somente uma assinatura, que é a assinatura do método área, que vai ser usada
para calcular a área da forma geométrica e retorna a área que o valor é do tipo float64.
Temos duas formas aqui, duas assinuturas que definimos para o quadrado e para o círculo.
O quadrado tem a propriedade chamada lado e o círculo tem a propriedade chamada raio,
ambas propriedades do tipo float64.
Vemos que a área de cada forma é calculada de certa forma.
Não do quadrado, é o lado do quadrado, do círculo é o pi, fez o raio quadrado.
Agora, vamos definir cada método área para cada forma?
Quando a gente definir o método área, por si só a definição vai automaticamente implementar a interface geométrica,
porque no go a implementação de interface é de modo implícito.
Não precisa explicitamente dizer tipo quadrado implementa interface, tipo círculo implementa interface.
Vamos aqui.
Depois da definição do quadrado, vamos criar nosso método, vou chamar o método de área, funk, área.
Mas para poder deixar esse cara como método, nós precisamos adicionar entre nome do método e o palavra chave funk,
aquela lista de quadrâmetros receptores.
O receptor, nesse caso, será um quadrado, tipo quadrado, vou chamar de que?
E vai ser do tipo quadrado.
Agora, quando você recebeu o que, o que vai acontecer?
Vamos retornar o que?
A área, vamos calcular a área como o que ponto lado ao quadrado.
Nesse caso, você pode só dizer o que ponto lado vezes o que ponto lado.
Dá na mesma.
Com isso, a definição do método área para o tipo quadrado,
ele vai implicitamente implementar a interface geométrica.
Então, aqui no função main, se você definir uma variável do tipo geométrica,
dessa maneira aqui, variável geométrica,
eu vou falar G,
igual,
você só definir a variável geométrica,
e eu, na verdade, está errado aqui, desculpa, o nome vem antes do tipo.
Então, eu vou definir a variável G do tipo geométrica,
nesse caso, é uma interface.
Então, temos a variável G,
e vai armazenar o valor do tipo geométrica, que é interface,
tipo de interface.
Agora, o quadrado implementa a interface geométrica.
Portanto, podemos atribuir um novo quadrado aqui ao G,
dessa maneira aqui, quadrado de lado 3, por exemplo.
Então, eu criei um quadrado de lado 3, esse é do tipo quadrado,
mais eu armazenando uma variável do tipo geométrica.
Mas o quadrado implementa a interface geométrica, então, ele aceita isso.
Então, vamos dar aqui embaixo,
vou dar o fmt.println,
para imprimir o quadrado aqui, a área do quadrado.
A delas de usar o printf, em vez de println,
para eu usar a substituição aqui,
a área do quadrado de lado por s,
aqui será f, ou é d.
Esta atual é s, vírcula.
Agora, este aqui vai ser o g.lado vírcula,
o g.area chamado da função.
Como estamos usando o fmt?
Vamos lá em cima do arquivo e importar.
Import, vou abrir os 40's e vou definir cada pacote em sua própria linha,
e vou fazer o fmt entre aspas duplas.
Vamos testar para ver aqui se não teve nenhum problema.
Pode ser que ele reclama que eu não tenho usado o círculo, mas vamos ver aqui.
Vamos ao terminal.
O meu arquivo é chamado de interfaces.go, então, vou falar go run interfaces.go.
Deu problema, na verdade.
Vamos ler um por um.
Eu esqueci do que?
Da definir o tipo do valor de retorno da função do método área do quadrado.
Se você notar aqui na linha 16,
está dizendo que tem muitos argumentos a retornar.
Ele espera que não tenha nenhum, mas retornamos um float64.
Na linha 16 precisamos definir na assinatura do método a função que retorna o float64.
Então isso é bom para a gente aprender a debugar.
Sempre vai ter as coisas que eu esqueço.
Vamos rodar de novo agora com o problema.
Linha 27 está dizendo que o g.lado está indefinido.
O type geométrica, tipo geométrica, não tem campo ou método lado.
Por que será?
Vamos ver aqui.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: