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
Saída:
Medidas do retângulo(largura e altura): {3 4}
Área: 12
Perímetro: 14
Medida do círculo(raio): {5}
Área: 78.53981633974483
Perímetro: 31.41592653589793
É isso pessoal, fico por aqui, na próxima a gente vai ver embedding.
Até mais. :)
página do Código Fluente no
Facebook
Esse é o link do código fluente no Pinterest
Meus links de afiliados:
Obrigado e bons estudos. ;)