Trabalhando com 인터페이스 em Go
예를 들어, podemos criar uma interface chamada
FormaGeometrica
는 형식 기하학으로 deveão implementar pois todas elas possuem um perímetro e uma área로 요청합니다.type FormaGeometrica interface {
Perimetro() float32
Area() float32
}
다음과 같은 형식으로 essa 인터페이스를 구현하기 위해 예를 들면 다음과 같은 유형의 팁
Circulo
이 있습니다.type Circulo struct {
raio float32
}
func NewCirculo(raio float32) Circulo {
return Circulo{
radius: raio,
}
}
func (c Circulo) Perimetro() float32 {
return 2 * math.Pi * c.raio
}
func (c Circulo) Area() float32 {
return math.Pi * c.raio * c.raio
}
주의할 점은 인터페이스
Circulo
를 구현하는 팁FormaGeometrica
에 대한 설명입니다. Isso ocorre porque em Go isso é feito de forma implícita, ou seja, se um tipo implementa os métodos contidos em uma interface, esse tipo automaticamente implementa essa interface.특정 인터페이스를 구체적으로 구현하려면 특정 인터페이스를 구현해야 하며, 컴파일 오류가 있을 수 있고 essa 인터페이스를 구현해야 할 수도 있습니다. 다른 코드는 없습니다:
var _ FormaGeometrica = NewCirculo(3)
Aqui estamos usando o identificador em branco para definir uma variável que nunca será utilizada no código. essa variável은 essa 인터페이스를 구현하지 않고 컴파일 오류로 인해 오류가 발생한 인터페이스에 대한 팁을 제공합니다
struct Circulo
. Fazendo isso, conseguimos forçar nossos tipos는 특히 구현 알고리즘 인터페이스입니다.Outro ponto Importante é saber que existe a
interface{}
que nada mais é do que uma interface que não possui nenhum método, ou seja, todos os tipos de dados implementam essa interface. Isso significa que se algum método receber um paraâmetro do tipo interface{}
, qualquer variável poderá ser enviado nesse paraâmetro, independente do tipo.Vamos criar agora mais um tipo para exemplificar:
type Quadrado struct {
lado float32
}
func NewQuadrado(lado float32) Quadrado {
return Quadrado{
lado: lado,
}
}
func (c Quadrado) Perimetro() float32 {
return 4 * c.lado
}
func (c Quadrado) Area() float32 {
return c.lado * c.lado
}
Agora podemos usar esseses tipos em variáveis do tipo interface de
FormaGeometrica
. No código abaixo está sendo criada uma slice do tipo FormaGeometrica
que pode armazenar variáveis tanto do tipo Circulo
quanto do tipo Quadrado
. Ao iterar sobre os elementos dessa slice, não precisamos saber qual o tipo concreto de cada elemento, basta utilizar os métodos definidos pela interface.package main
import "fmt"
type FormaGeometrica interface {
Perimetro() float32
Area() float32
}
func main() {
var formas []FormaGeometrica
circulo := NewCirculo(2)
quadrado := NewQuadrado(2)
formas = append(formas, circulo)
formas = append(formas, quadrado)
for _, f := range formas {
fmt.Println(f.Perimetro())
}
}
Reference
이 문제에 관하여(Trabalhando com 인터페이스 em Go), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/brenoassp/trabalhando-com-interfaces-em-go-2aek텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)