Um momento
Aula 61
Cursos / Aprenda Go / Golang (Curso de Programação)
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:

  1. O tipo de retorno do método área não estava definido corretamente, levando a um erro de "muitos argumentos a retornar".
  2. Um erro relacionado ao campo lado foi reportado, indicando que o tipo geométrica não possui campo ou método lado 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: