Tecnicamente golang no tiene programacion a objetos ya que no se manejan clases sin embargo podemos hacer ciertos ajustes para trabajar con el lenguaje orientado al paradigma orientado a objetos, ahora bien, ¿como? Se basa de la forma de utilizar structs como una especie de clase con atributos ya que al no haber clases tampoco hay herencia, pero se puede resolver usando la composición en lugar de la herencia, con lo cual podemos extender la funcionalidad sin demasiados problemas.
Go no posee clases pero podemos definir métodos para los tipos de datos. Esto en combinación con structs (que no dejan de ser un tipo de datos en el fondo) permiten poder aplicar los conceptos de programación orientada objetos.
POO con Structs →
package main
import "fmt"
type Persona struct { //se declara en May para que pueda ser visible publicamente.
nombre string
apellido string
edad int
}
func main(){
// PROGRAMACION ORIENTADA A OBJETOS:
persona1 := Persona{"Juan", "Osorio, con edad:", 65}
persona2 := Persona{"Mark", "Zuckerberg, con edad:", 45}
fmt.Println(persona1)
fmt.Println(persona2)
persona2.apellido = "Orozco"
fmt.Println(persona2)
}
POO con Methods →
Aqui ya hacemos referencia también a otra parte que ví sobre los metodos los cuales son metodos para modificar las estructuras cuando se crean los metodos por valor o por puntero
package main
import "fmt"
type Persona struct { //se declara en May para que pueda ser visible publicamente.
nombre string
apellido string
edad int
}
//Aqui va el método:
func (p Persona) saludarPersona(saludo string){
fmt.Println(saludo + "," + p.nombre)
}
func main(){
// PROGRAMACION ORIENTADA A OBJETOS:
persona1 := Persona{"Juan", "Osorio, con edad:", 65}
persona2 := Persona{"Mark", "Zuckerberg, con edad:", 45}
fmt.Println(persona1)
fmt.Println(persona2)
persona2.apellido = "Orozco"
fmt.Println(persona2)
//INVOCANDO MEDIANTE MÉTODO a persona1 que llama al objeto Persona y le añadimos el metodo de saludar.
persona1.saludarPersona("Hola ")
}