Como dicen en la pagina de FAQs de go, si es orientado a objetos pero no completamente.
https://golang.org/doc/faq#Is_Go_an_object-oriented_language
Introducción
Características esenciales de Go
Qué aprenderás y qué necesitas saber
Repaso general: variables, condicionales, slices y map
Repaso general: GoRoutines y apuntadores
Programación orientada a objetos
¿Es Go orientado a objetos?
Structs vs. clases
Métodos y funciones
Constructores
Herencia
Interfaces
Aplicando interfaces con Abstract Factory
Implementación final de Abstract Factory
Funciones anónimas
Funciones variadicas y retornos con nombre
Go Modules
Cómo utilizar los Go modules
Creando nuestro módulo
Testing
Testing
Code coverage
Profiling
Testing usando Mocks
Implementando Mocks
Concurrencia
Unbuffered channels y buffered channels
Waitgroup
Buffered channels como semáforos
Definiendo channels de lectura y escritura
Worker pools
Multiplexación con Select y Case
Proyecto: servidor con worker pools
Definiendo workers, jobs y dispatchers
Creando web server para procesar jobs
Conclusión
Continúa con el Curso de Go Avanzado
Aportes 14
Preguntas 0
Como dicen en la pagina de FAQs de go, si es orientado a objetos pero no completamente.
https://golang.org/doc/faq#Is_Go_an_object-oriented_language
Es todo acerca de tipo
Es go un lenguaje orientado a objetos? Go tiene aspectos de OOP. Pero todo es acerca de TIPOS. Creamos TIPOS en Go; TIPOS definidos por el usuario. Entonces podemos tener VALORES de ese tipo.
Podemos asignar VALORES de un TIPO definido por el usuario a VARIABLES.
Go es Orientado a Objetos
No creas clases, creas un TIPO
No creas instancias, creas un VALOR de un TIPO
Tipos definidos por el usuario
Podemos declarar un nuevo tipo
foo
El tipo subyacente de foo es int
Conversión a int
int(miEdad)
Convirtiendo tipo foo a tipo int
ES UNA MALA PRÁCTICA HACER ALIAS DE TIPOS
Excepción:
Si necesitas asignarle métodos a un tipo
Ver el paquete de tiempo para un ejemplo
type Duration int64
Duration tiene métodos asignados
Tipos Nombrados vs Tipos Anónimos
Tipos anónimos son indeterminados. Aún no han sido declarados como un tipo. El compilador tiene flexibilidad con tipos anónimos. Puedes asignar un tipo anónimo a una variable declarada de cierto tipo. Si la asignación puede ocurrir, el compilador hará el trabajo de determinar el tipo; el compilador hará una conversión implícita. No puedes asignar un tipo nombrado a un tipo de diferente nombre.
Alineamiento arquitectónico y más
Convención: organiza tus campos lógicamente. Legibilidad y claridad ganan en rendimiento como punto crítico. Go será de buen rendimiento. Ve primero por legibilidad. Sin embargo, si estás en una situación donde necesitas darle prioridad al rendimiento: agrega los campos del más grande al de menor tamaño, por ejemplo: int 64, int32, float32, bool
En mi punto de vista, Go puede simular ciertos comportamientos de POO, pero no lo es.
Yo creo que si es un lenguaje orientado a objetos ya que con GO bien podemos implementar los 4 pilares de la POO aunque con ciertas implementaciones diferentes o limitantes , con respecto a las ya acostumbradas de otros lenguajes de POO:
Abstracción
Encapsulamiento
Polimorfismo
Herencia
Golang es un lenguaje que puede tomar ciertas características de un lenguaje orientado a objetos, podemos tener una estructura que tendrá la colección de nuestros datos y/o propiedades y tener receive functions que seria nuestros métodos públicos y privados.
El mismo creador de la base de OOP ha dicho que su nombre puede generar confusión, que en realidad la base está en la comunicación (este link muestra un poco). Además el mismo uncle Bob reconoce como la clave de OOP el polimorfismo, lo cual consigue Go a partir basado en interfaces. Solo con esto, diría que es suficiente para poder aplicar el pilar de OOP, sin embargo, el resto al final es una formalidad
yo leyendo poco respecto al tema creo que Go/Golang es un lenguaje orientado a objetos, tiene los struct que como en C generas la estructura de tu objeto, pero visto desde Java el acceso a los atributos es muy diferente. Yo creo que se puede emular todo, pero si son struct públicos es mucho más fácil el acceso.
Go no es orientado a objetos (mi opinión), todos los lenguajes pueden llegar a emular los comportamientos pero no los tienen de manera nativa. Incluso C que es funcional puedes manejar funciones para emular POO pero no lo es.
Yo vengo de Java y kotlin y siento que si es orientado a objetos, pero a su manera, utilizando structs en lugar de clases
Segun tu explicación, Si es orientado a Objetos y por lo que veo. Vamos a ver que tal mas adelante .!
Creo que si, porque podría hacer todo lo que java hace, pero de una manera diferente que no se siente orientado a objetos, porque por ejemplo los métodos en java van dentro de la clase y en go podemos declararlos a fuera, como que los struct son las clases y de igual manera tienen identificadores de acceso, se puede encapsular, creo que no se puede hacer polimorfismo.
Siento que es una evolución del POO.-
Go puedes simular algunas cosas del paradigma orientado a objetos, pero la realidad es que no es.
Ya que no tiene el uso de clases explicitamente se puede considerar a GO como un lenguaje parcialmente orientado a objetos hehe
Apuntes:
¿Es Go Orientado a objetos?
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.