Bueno me tocó el turno de para hablar de las estructuras las estructuras son mucho más importantes en
gó que en otro lenguaje de programación y voy a explicarles porque en Go no existen la programación
orientada a objetos como la conocemos con clases con métodos con propiedades no existe no existe la
herencia polimorfismo tal como lo hemos conocido por ejemplo el no dijo fieis en Java.
En otros lenguajes como punto net como visual al punto Aretoa sillar no existen de esa manera Goh implementa
una nueva forma de hacer programación orientada a objetos y para eso SEO se basa en las estructuras.
Entonces cuando ustedes escuchan estructuras en GOW inmediatamente se le viene a la mente cómo manejamos
comúnmente las estructuras en otros lenguajes de programación pero Go tienen un concepto especial y
una forma especial de manejarse.
Vamos a ver el primer ejemplo vamos a empezar de menor a mayor pero este capítulo va a ser un capítulo
muy intenso porque vamos a aprender algo muy especial y vamos a aprender pequeñas cosas nuevas que nos
van a enriquecer en el lenguaje.
Vamos a ir a nuestra carpeta ejerce no 9.
Vamos a crear nuestro nuevo archivo Moine puntocom vamos a copiar lo habitual vamos a hacer el import
pero en este caso vamos a encerrar entre paréntesis lo que vamos a importar porque no solo vamos a importar
el F MT sino que vamos a importar en este ejemplo que vamos a ver un nuevo paquete que es el paquete
Timm para manejar fechas todo lo que tiene que ver con fechas y tipos de dato de tipo fecha y hora así
que vamos a colocar en la primera línea el.
Es indistinto el orden pueden colocar un paquete antes que el otro no no pasa nada y ahora vamos a colocar
el paquete Timm que es un paquete de GOW muy bien ya tenemos nuestros dos paquetes.
Inclusive en este capítulo vamos a saber cómo importar paquetes creados por nosotros así que va a ser
muy interesante este capítulo.
Vamos a crear nuestra estructura la sintaxis para crear una estructura en Goh comienza con la instrucción
type luego va el nombre de la estructura por ejemplo usuario y luego va el tipo de dato que es la estructura
tiene que ser de tipo estro muy bien ahora como cualquier estructura nosotros vamos a poder crear dentro
de ella varias variables con su tipo de dato entonces vamos a crear una de tipo aided que se llama aided
que es integrar.
No hace falta separar por comas damos Center y vamos listando la estructura nombre que es de tipo String.
Ahora vamos a colocar una fecha fecha de alta que va a ser de tipo Timm siempre ponemos primero el nombre
del paquete luego un punto y luego la función que es el tipo de dato de estructura que es de tipo Time.
Luego ponemos nuestro estatus y le vamos a colocar un tipo de variable Juliana muy bien.
Esta es nuestra estructura vamos a grabar una idea de usuario un nombre una fecha de alta de usuario
y un estatus para saber si está habilitado o no habilitado.
Si nosotros ahora en nuestra función main hiciéramos referencia a esta estructura primero como en toda
la programación orientada a objetos vamos a tener que crear un objeto referenciando a esta estructura.
Cómo se crea es muy simple vamos a colocar un objeto llamado Ussher y le vamos a decir que va a ser
un new usuario muy bien un nuevo usuario ya tenemos nuestro objeto llamado user.
Recuerden que en programación orientada a objetos.
Cuando nosotros definimos una clase esa clase no es un objeto en sí mismo sino que es una definición
un mapa de cómo crear un objeto.
Aquí engo pasa lo mismo entonces el objeto va a tener que ser creado dentro de nuestras funciones haciendo
referencia a la estructura de usuario o las estructuras de objetos que nosotros tengamos creadas en
el código.
Aquí hemos creado un usuario que es un nuevo usuario y se llama y user y ahora yo voy a poder jugar
con los valores voy a poder poner y ser punto por ejemplo fíjense como ya metra de todos los miembros
de esa estructura y será ideal y le vamos a decir que el 10 User nombre vamos a poner Pablo y ahora
puedo mostrar por pantalla usando nuestro viejo FME qué voy a mostrar y ser muy bien vamos a grabar
vamos en nuestra carpeta hacemos under yo ya estaba parado en ejerceré o 9 hacemos un barran Moine apuntó.
Esperamos lo prudencial y vamos a ver nuestro objeto nuestro objeto es un objeto de tipo usuario aquí
nos lo dice.
No no yo no pedí que me muestre de qué tipo era el objeto sino sus valores cómo está conformado fíjense
que me pone un puntero lo que me muestra es un puntero y me dice el contenido del objeto está contenido
por un número 10 en el aided un nombre Pablo y una fecha que como no la inicial y se me pone el valor
mínimo posible el día 1 del mes 1 del año 1.
Este es el mínimo posible de fecha y hora que maneja GOW.
Luego me pone un fouls.
Por qué.
Porque yo tampoco he inicializar el estatus.
Muy bien esto es lo básico diga vamos a ir algo más complejo porque hasta aquí todo está dentro de todo
pero vamos a ir algo más complejo vamos a ir a lo real porque lo real es que yo cuando haga mis aplicaciones
a nivel empresarial no voy a tener mis objetos mis estructuras creadas dentro de mi main seguramente
van a haber librerías de estructuras creadas para darle este reutilice habilidad.
Entonces yo voy a tener que importar esas librerías con eso.
Esas definiciones de objeto para poder usar en mi aplicación lo que vamos a hacer en ejerceré o 9 nos
vamos a parar en la carpeta vamos a crear una nueva carpeta la vamos a llamar y usar y dentro de ello
ser perdón creé un archivo me parece vamos a borrar esto vamos a la carpeta vamos a crear una nueva
carpeta Barassi llamada yo Ussher y dentro de ellos ser voy a crear un archivo que se va a llamar user
punto.
Fíjense que ahora ya cambiamos no hace falta llamarlo Main punto porque no todo se va a llamar Main
main es mi programa principal el punto de entrada de ejecución por el cual mi aplicación va a empezar
a funcionar pero yo puedo tener otros archivos punto hago con distintos nombres que van a ser paquetes
creados por mí con toda la funcionalidad voy a poder tener paquetes creados para manejar bases de datos
para manejar usuarios para manejar seguridad para manejar encriptación.
Lo voy a poder ir haciendo modular el sistema y de esta forma Google me permite armar toda una estructura
muy similar y muy evolucionada de lo que es la programación orientada a objetos.
Entonces aquí qué vamos a hacer pacas y usar fíjense que en este caso el Visual Studio coime ya se da
cuenta que tengo que comenzar con esta sintaxis.
Por qué.
Porque si el archivo se llama usar el pacas conviene ponerle el mismo nombre.
Es una práctica casi obligada.
No voy a colocar pacas Main porque mi pacas Moine estar en otro lado.
No podemos repetir los nombres de los packages.
Bueno en mi packaging y usar lo que yo voy a hacer.
Voy a hacer un import solamente de la librería Time.
No voy a importar FME porque esto va a ser código que no va a mostrar por pantalla en Maine.
Voy a interactuar con el usuario y voy a mostrar pero estos son librerías de código.
Lo que estoy creando y voy a crear mi estructura usuario lo coloca en mayúscula para que tenga usabilidad
dentro de todo el sistema y no solo dentro de este archivo.
Recuerden el tema de las variables globales y demás voy a tener que darle una visibilidad mayor.
Ahora si dentro de mí Paucar yo quiero tener un tipo de usuario que se va a usar solamente adentro de
ese packaging porque va a ser algo privado porque lo voy a usar para hacer cálculos dentro de la funcionalidad
de ese pacas.
Ahí sí lo voy a colocar en minúscula para que no sea visible cuando yo esté haciendo referencia desde
afuera de ese archivo.
Espero que se entienda esto esto es un tema de ESCO de objetos.
Va a haber cosas que las voy a manejar privada dentro de este pacas y hay cosas que las voy a tener
que ver desde afuera como usuario lo voy a ver desde afuera.
Yo lo creo en mayúsculas.
Aquí vamos a repetir lo mismo lo mismo que teníamos antes.
Vamos a colocar una idea y lo vamos a poner todo ahora en mayúscula.
Una idea el nombre va a ser de tipo String.
Vamos a ser fecha alta que va a ser Time Puntoticket el segundo Time va en mayúscula.
Es muy importante eso.
Cuando ustedes vean que tienen que hacer referencia a tipos de datos que vienen en paquetes siempre
lo van a ver también con el string.
Siempre se usa el segundo en mayúscula.
Esas son convenciones que pone ya vienen en el lenguaje y nosotros no podemos hacer más que eso.
Muy bien si yo grabara esto desde mi Moine yo puedo hacer importar este paquete y usarlo sin problemas.
Pero vamos a hacerlo más complejo vamos a agregarle un método o una función en realidad vamos a hacer
una función que en realidad va a operar como método recuerden que en Google no existe la palabra método
en Son todas funciones lo que determina si funciona como un método o como una función.
Si devuelve o no valores esta función que vamos a crear ahora no devuelve valores sino que va a funcionar
como un método un método de asignación de valores entonces comienza con funk y lo que vamos a ver ahora
es que antes de colocarle el nombre de nuestro método vamos a decirle que va a recibir de parametro
pero no recibir por el usuario sino que va a hacer referencia a esta función.
Ahora les voy a explicar esto vamos a llamarla alta usuario vamos a escribir tipo camello vamos a recibir
una idea de tipo entero vamos a recibir un nombre que va a ser de tipo String.
Vamos a recibir fecha alta que va a ser de tipo Time Puntoticket y vamos a recibir estatus que es booleana.
Esta es nuestra función qué es lo que va a hacer esto.
Prefiero escribirla para poder explicar y ser más claro.
Esta función va a recibir parámetros que se los voy a pasar desde mi main cuando yo haga referencia
por herencia a este tipo de estructura pero esta función va a estar impactando va a estar haciendo una
referencia a este objeto a esta estructura.
Entonces cuando dentro de la función yo esté hablando de Díaz voy a estar hablando porque esto es un
tipo puntero voy a estar hablando de la estructura usuario si yo aquí coloco Tiz punto.
Fíjense que al poner Diz me aparecen todos todos y cada uno de los componentes de la estructura por
qué.
Porque yo le dije que cuando dentro de la función haga mención a Diz eso tenía que ser un puntero hacia
usuario.
Entonces al colocar Diz y colocar ahí dije voy a poder grabarle el valor de aided al colocar déis nombre
voy a poder llamar a nombre.
Al colocar Ordiz y poner fecha alta en mayúscula voy a poder grabar fecha alta en minúscula que son
todos los campos que me vienen de parametro y yo coloco Tiz y coloco status voy a poder grabar status
se entiende esto.
Si yo no hubiera colocado esto y entro y desde afuera llamo al usuario cómo hago referencia a esto como
le digo tendría que crear un nuevo objeto tendría que crear un nuevo objeto por ejemplo que sea un apuntador
donde está la persona que sea un apuntador de usuario.
Esto es lo mismo que eso pero generalmente lo que hacen en Goh es directamente antes de entrar a la
función se le dice a la función que dentro de la función cuando se haga mención de la palabra déis ahí
voy a estar apuntando a la estructura usuario.
En realidad por qué dice.
Porque dice usa ustedes lo habrán visto en Java dice usa para hacer referencia al objeto en el que estoy
parado y cómo estoy parado de la estructura que es usuario y dentro del Package que es Houser se usa
la convención días más o menos para que cuando alguien lee un código lo entienda y no diga PPO Pato
cualquier cosa muy bien.
Ahora nosotros ya tenemos nuestro paquete creado nuestro paquete y usarlo vamos a grabar y ya lo tenemos
en nuestra carpeta y user vamos a cerrar aquí.
Vamos a volver a nuestro Main a nuestro Main y lo que vamos a hacer aquí vamos a borrar esta estructura
porque ya si vamos a un Dator un ejemplo real ya no tenemos que manejar la estructura dentro de main.
Nosotros vamos a ponerlos a hacer un nuevo desarrollo creamos un Mayne y nos dicen que tenemos que usar
el paquete y Ussher porque tenemos que dar de alta a usuarios.
Quiero aclarar algo esto es a modo de ejemplo aquí en nuestro paquete y Ussher seguramente en un ejemplo
real va a haber manejo de base de datos base va a haber un import a otros paquetes o Sever paquetes
importando otros paquetes donde vamos a manejar bases de datos alta usuario va a conectarse a la base
de datos va a ser validaciones.
Nosotros estamos viendo un ejemplo ahora porque todavía no hemos visto bases de datos ni nada de eso
así que vamos a vamos a ver lo que tiene que ver con nuestro primer con nuestra primera sección del
curso vamos a nuestro Main.
Aquí lo que vamos a hacer es algo nuevo en nuestro import.
Vamos a crear primero una referencia llamada Hush lo puedo llamar Pepe cualquier cosa no es un nombre
de variable nombre de objeto y luego vamos a decirle que cuando nosotros dentro de Main hablemos de
US de la UBA la S en realidad vamos a estar haciendo mención al paquete y user fijense un tema importante
dos cosas que nos están mostrando ahora los paquetes tienen que estar en la carpeta en la que estoy
parado en la carpeta que estoy parado estoy en ejerceré o nueve por debajo tienen que estar los paquetes
porque recuerden que esto una vez que compila ya el ejecutable y lo mando a cualquier sistema operativo
y funciona.
Ahora y por un tema de usabilidad conviene que los paquetes esté todo metido dentro de la misma carpeta
de proyecto esto lo vamos a ver bien cuando veamos GIT y todo lo que tiene que ver con versionado de
código y demás.
Ahora aquí GOM me está obligando a hacer dos cosas una a mencionar el nombre de la carpeta fijense que
yo aquí no estoy diciendo el nombre del paquete la carpeta en la carpeta y user vou asume que dentro
de la carpeta y user hay un ser punto.
Si yo Millos apunta vale cambiar el nombre.
Esto no funciona no funciona porque lo que me permite importar es la carpeta y dentro de la carpeta
tiene que estar el archivo correspondiente.
Entonces esto es muy importante.
Esto no funciona
esto no funciona no no funciona sigo lo que hace es importar paquetes y los paquetes son carpetas.
Si ustedes van a la carpeta donde instalo GOW van a ver que hay una carpeta FBT una carpeta Taine.
Así funciona muy bien ahora yo ya hice mención a mi carpeta que va a ser mi paquete nuevo y lo voy a
grabarlo distanciar dentro de mi main con el nombre Yus.
Entonces vamos a crear una nueva estructura para hacerlo más complejo y qué vamos a ver con esto.
Vamos a ver herencia vamos a ver herencia.
Supongamos que yo quiero heredar yo quiero heredar de mis usuarios de mi estructura usuario voy a crear
una nueva estructura llamada Pepe cualquier cosa porque pepesuno usuario en definitiva le voy a decir
que de tipo Astro y voy a decirle que dentro
voy a hacer mención a usuario dentro de Pepe lo que tengo es una es como si fuera un puntero a usuario.
Vamos a ir a nuestro mail para ver si funciona vamos a hacer un user le vamos a decir que es un objeto
creado va a ser de tipo new Peppe fijense.
Yo no estoy creando Nioh y Houser no estoy creando nuevo usuario estoy creando un usuario llamado Pepe
que en realidad es una herencia de la estructura llamada usuario se entiende esto.
Yo aquí voy a poder crear n usuarios y lo bueno de esto es que yo dentro de PP voy a poder agregar tipos
de datos además como extendiendo como dándole polimorfismo a lo que es la estructura la estructura de
usuario lo puedo heredar y puedo modificarlo entonces yo aquí estoy creando un musher que es de tipo
Peppe y voy a decir que yo ser punto alta usuario
recuerden que teníamos un alto usuario le voy a poner Pablo chilota vamos a seguir con los parámetros
fijense ahora yo estoy usando una función de Time paraqué para fecha alta fíjense que aquí me da una
ayuda de cómo está compuesto alta usuario porque entiende por más que haya pasado de ser a PP y de PP
ahora es un ser que yo seré aquí es un objeto no tiene nada que ver con esto.
Vamos vamos a hacerlo diferente vamos a poner le voy a poner una o directamente para que no crea confusión
este Ussher coneste esto es un objeto llamado o y a ser de tipo PP y voy a usar de PP la función alta
usuario ahora PP no tiene ninguna función.
Alta usuaria por qué no me permitió hacer esto porque estoy haciendo herencia.
Esta es la manera de hacer herencia.
Muy bien y aquí le voy a poner un Truc
si esto estuviera mal si.
Si esto fuera cualquier cosa no me hubiera parecido la ayuda de alto usuario porque cómo encontró al
usuario y ahora lo que voy a hacer es un FME print LN o punto usuario muy bien fijense como yo o que
en realidad viene de PP yo estoy creando la forma de que me muestre por pantalla algo que viene de otro
paquete estoy haciendo una herencia de herencia una cosa muy buena vamos a grabarlo íbamos a ejecutar
nuestro punto bueno muy bien en fijense me está mostrando cómo está compuesto ahora usuario y ya me
aparece la idea 1 Pablo chilota la fecha de hoy.
De paso se enteran que fecha y hora estoy grabando el video y un troll que es lo que hemos puesto aquí.
Esto es lo que tienen que aprender de manejo de usuarios manejo de objetos programación orientada a
objetos.
Por supuesto puede haber muchos más ejemplos.
Básicamente esto es lo más importante el cómo crear paquetes cómo alojarlos en carpetas que cuelguen
de mi carpeta principal cómo las tenemos que llamar del mismo nombre de la carpeta al archivo apuntado.
Cómo los vamos a importar en nuestra aplicación.
Entonces ahora ustedes van a poder tener la libertad de crear carpetas y paquetes y van a poder llamarlos.
Su código.
Va a ser simple no van a tener tanto código porque van a tener distribuido el código en distintos paquetes.
Y a esto apunta Goh a la programación limpia a menos código a que sea más legible a que tengamos todo
estructurado y sale muy fuerte a competir en programación orientada a objetos.
Con esto no nos vamos a extender más en lo que es programación orientada a objetos.
Podríamos estar 50 capítulos pero quiero sembrar las bases para que ustedes puedan avanzar y veamos
otros temas así que nos vemos en el próximo capítulo.