Aula 21 – Tutorial Golang – Interface
Aula 21 – Tutorial Golang – Interface
Página principal do blog
Todas as aulas desse curso
Aula 20 Aula 22
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook.
Sigam o Código Fluente no Instagram.
Código Fluente no Pinterest.
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Melhore seu NETWORKING
https://digitalinnovation.one/
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
E também para me seguir no https://github.com/toticavalcanti.
Código final da aula:
https://github.com/toticavalcanti
Toti:
https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA
Backing track / Play-along:
https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA
Código Fluente
https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w
Putz!
https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw
PIX para doações
Se quiser copiar o código do PIX:
00020126580014BR.GOV.BCB.PIX013643c5f950-535b-4658-b91f-1f1d135fe4105204000053039865802BR5925Antonio Cavalcante de Pau6009SAO PAULO61080540900062070503***6304946B
Aula 21 – Tutorial Golang – Interface
Interface
Uma interface é uma estrutura/sintaxe de programação que permite ao programador impor certas propriedades em um objeto (classe).
São coleções nomeadas de assinaturas de métodos.
O código abaixo é uma interface básica para formas geométricas, onde declaramos que ela irá ter dois métodos, o que calcula a área e o que calcula o perímetro, e isso independe da geometria, podendo ser um retângulo ou um círculo, no caso do exemplo mostrado.
type geometry interface {
area() float64
perim() float64
}
Para esse exemplo, implementaremos essa interface com os tipos rect e circle.
type rect struct {
width, height float64
}
type circle struct {
radius float64
}
Para implementar uma interface em Go, basta implementar todos os métodos da interface.
Métodos do Retângulo
Aqui a implementação dos métodos que calcula a área e o que calcula o perímetro de um retângulo, ou seja, faz o cálculo da geometria.
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) perim() float64 {
return 2 * r.width + 2 * r.height
Métodos do Círculo
Aqui a implementação dos métodos que calcula a área e o que calcula o perímetro de um círculo.
func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
return 2 * math.Pi * c.radius
}
Chamando métodos da interface
Se uma variável tiver um tipo de interface, podemos chamar métodos que estão na interface nomeada.
Aqui está uma função de medida genérica aproveitando isso para trabalhar em qualquer geometria.
func measure(g geometry) {
fmt.Println(g)
fmt.Println("Área: ", g.area())
fmt.Println("Perímetro: ", g.perim())
}
Os tipos de estrutura circle e rect implementam a interface geometry para que possamos usar instâncias dessas estruturas como argumentos para medir.
func main() {
r := rect{width: 3, height: 4}
c := circle{radius: 5}
fmt.Print("Medidas do retângulo(largura e altura): ")
measure(r)
fmt.Print("Medida do círculo(raio): ")
measure(c)
}
Código completo
package main
import (
"fmt"
"math"
)
type geometry interface {
area() float64
perim() float64
}
type rect struct {
width, height float64
}
type circle struct {
radius float64
}
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) perim() float64 {
return 2*r.width + 2*r.height
}
func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
return 2 * math.Pi * c.radius
}
func measure(g geometry) {
fmt.Println(g)
fmt.Println("Área: ", g.area())
fmt.Println("Perímetro: ", g.perim())
}
func main() {
r := rect{width: 3, height: 4}
c := circle{radius: 5}
fmt.Print("Medidas do retângulo(largura e altura): ")
measure(r)
fmt.Print("Medida do círculo(raio): ")
measure(c)
}
E pra executar é só entrar na pasta onde tá o arquivo interfaces.go
go run interfaces.go