En la programación orientada a objetos, el polimorfismo permite que los objetos exhiban diferentes comportamientos según su clase. Pero en Go, el concepto de polimorfismo no se implementa en el sentido tradicional. Profundicemos en las razones detrás de esto y exploremos cómo lograr una funcionalidad similar en Go.
Go no es un lenguaje tradicional orientado a objetos. Adopta un enfoque diferente al utilizar:
A diferencia de los lenguajes orientados a objetos, Go no admite la anulación de métodos ni los métodos virtuales. Esto permite a Go mantener un mayor nivel de seguridad de tipos.
Para lograr un comportamiento similar al polimorfismo en Go, podemos emplear las siguientes técnicas:
Ejemplo:
package main
import "fmt"
// Common interface
type Foo interface {
printFoo()
}
// Derived type with unique implementation
type FooImpl struct{}
func (f FooImpl) printFoo() {
fmt.Println("Print Foo Impl")
}
// Derived type composed using the common interface
type Bar struct {
FooImpl
}
// Function returning the common interface
func getFoo() Foo {
return Bar{}
}
func main() {
fmt.Println("Hello, playground")
b := getFoo()
b.printFoo()
}
En este ejemplo, Foo es la interfaz común, FooImpl es el tipo derivado con su propia implementación y Bar es un tipo derivado compuesto mediante FooImpl. La función getFoo() devuelve una instancia de la interfaz Foo, lo que nos permite tratar diferentes tipos derivados como un tipo de interfaz.
Este enfoque proporciona una forma de polimorfismo en Go al permitirnos manejar diferentes tipos derivados como instancias de una interfaz común.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3