Introducción a la POO en Go
Parte de la sección Programación Orientada a Objetos del Journey de GO de Coddy — lección 5 de 107.
Go no tiene clases, pero logra la programación orientada a objetos a través de structs y métodos. Un struct agrupa datos relacionados, y los métodos definen el comportamiento asociado a ese struct.
Define una estructura para contener datos
type Dog struct {
Name string
Age int
}Adjunta un método a la estructura
func (d Dog) Bark() string {
return d.Name + " says Woof!"
}Crea una instancia y úsala
package main
import "fmt"
type Dog struct {
Name string
Age int
}
func (d Dog) Bark() string {
return d.Name + " says Woof!"
}
func main() {
myDog := Dog{Name: "Buddy", Age: 3}
fmt.Println(myDog.Bark()) // Salida: Buddy says Woof!
fmt.Println(myDog.Age) // Salida: 3
}En Go, la parte (d Dog) antes del nombre del método se llama un receptor. Conecta el método a la estructura Dog, de manera similar a cómo los métodos pertenecen a las clases en otros lenguajes.
Desafío
FácilCrea una estructura Cat con un método para practicar el enfoque de Go hacia la OOP:
- Define una estructura
Catcon los camposName(string) yAge(int) - Añade un método
Speakque devuelva el nombre del gato seguido de" says Meow!"
Hoja de referencia
Go logra la programación orientada a objetos a través de structs y métodos. Un struct agrupa datos relacionados, y los métodos definen el comportamiento asociado a ese struct.
Define un struct para contener datos:
type Dog struct {
Name string
Age int
}Adjunta un método al struct usando un receptor (receiver):
func (d Dog) Bark() string {
return d.Name + " says Woof!"
}La parte (d Dog) antes del nombre del método es el receptor, que conecta el método al struct.
Crea una instancia y úsala:
myDog := Dog{Name: "Buddy", Age: 3}
fmt.Println(myDog.Bark()) // Salida: Buddy says Woof!
fmt.Println(myDog.Age) // Salida: 3Pruébalo tú mismo
package main
import "fmt"
func main() {
var name string
var age int
fmt.Scan(&name, &age)
cat := Cat{Name: name, Age: age}
fmt.Printf("Name: %s\n", cat.Name)
fmt.Printf("Age: %d\n", cat.Age)
fmt.Println(cat.Speak())
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de POO en Go
Archivos externosEspacio de trabajo y módulos de GoPaquetes e importacionesNombres exportados vs. no exportadosIntroducción a la POO en GoStructs como clasesDefinición de métodos en structsReceptores de puntero vs. de valorInicialización de structsFunciones constructorasResumen - Calculadora simple4Interfaces
Introducción a las interfacesImplementación implícitaLa interfaz como contratoInterfaz vacía (any)Type AssertionType SwitchComposición de interfacesInterfaces Stringer y ErrorResumen: Calculadora de figuras7Encapsulamiento
Campos exportados vs. no exportadosEncapsulamiento a nivel de paqueteMétodos Getter y SetterOcultamiento de información en GoResumen - Registros de estudiantes10Genéricos (Go 1.18+)
Introducción a los GenéricosParámetros de tipoRestricciones de tipoStructs genéricosSolución alternativa para métodos genéricosResumen - Colección genérica13Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón Abstract FactoryPatrón ObserverPatrón Strategy2Inmersión profunda en Tipos y Structs
Tipos básicos y compuestosDefiniciones de tipos personalizadosEtiquetas de StructsStructs anónimosStructs anidadosValores cero y por defectoRepaso - Libreta de contactos5Composición sobre herencia
Por qué Go no tiene herenciaConceptos básicos de incrustación de structsPromoción de métodosIncrustación de múltiples structsIncrustación vs AgregaciónShadowing de métodos incrustadosResumen - Jerarquía de empleados8Manejo de Errores y OOP
La interfaz errorTipos de errores personalizadosEnvoltura de errores (fmt.Errorf)Errores centinelaerrors.Is() y errors.As()Panic, Defer y RecoverResumen - Analizador de archivos3Punteros y Memoria
Fundamentos de punteros en GoPunteros a StructsPaso por valor vs referenciaLa función new()Garbage Collection en GoResumen - Constructor de Linked List6Polimorfismo en Go
Polimorfismo mediante interfacesDuck Typing en GoReglas de satisfacción de interfacesColecciones polimórficasInyección de dependenciasResumen - Procesador de pagos9Concurrencia y POO
Fundamentos de GoroutinesChannels y comunicaciónChannels con buffer vs. sin bufferSentencia Selectsync.Mutex y sync.RWMutexsync.WaitGroupDiseño de estructuras Thread-SafeResumen - Worker Pool