Merge branch 'MichaelCade:main' into main

This commit is contained in:
Rishab Kumar 2022-11-22 10:05:39 -05:00 committed by GitHub
commit c4aca63ec2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 308 additions and 169 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

@ -121,7 +121,7 @@ There will be a time when you have maybe used `git add .` but there are files yo
![](Images/Day39_Git19.png)
We can also do the same to modified files such as main.js and unstage the commit, see above we have a greem M for modified and then below we are unstaging those changes.
We can also do the same to modified files such as main.js and unstage the commit, see above we have a green M for modified and then below we are unstaging those changes.
![](Images/Day39_Git20.png)
@ -149,7 +149,7 @@ As an example let's go and delete our most important file in our directory, noti
![](Images/Day39_Git24.png)
Now we have no readme.mdin our working directory. We could have used `git rm readme.md` and this would then be reflected in our git database. Let's also delete it from here to simulate it being removed completely.
Now we have no readme.md in our working directory. We could have used `git rm readme.md` and this would then be reflected in our git database. Let's also delete it from here to simulate it being removed completely.
![](Images/Day39_Git25.png)

View File

@ -0,0 +1,52 @@
Go es una herramienta para gestionar el código fuente de Go.
Sintaxis:
go <command> [arguments]
Los comandos son:
bug Iniciar un informe de error
build Compilar paquetes y dependencias
clean Eliminar ficheros de objetos y en caché
doc Mostrar la documentación del paquete o símbolo
env Imprimir información del entorno de Go
fix Actualizar paquetes para que usen las nuevas APIs
fmt gofmt (reformatear) las fuentes de los paquetes
generate Generar ficheros Go procesando el código fuente
get Añadir dependencias al módulo actual e instalarlas
install Compilar e instalar paquetes y dependencias
list Listar paquetes o módulos
mod Mantenimiento de módulos
work Mantenimiento del workspace
run Compilar y ejecutar el programa Go
test Test de paquetes
tool Ejecutar la herramienta go especificada
version Imprimir la versión de Go
vet Informar de posibles errores en los paquetes
Use "go help <command>" para obtener más información sobre un comando.
Temas de ayuda adicionales:
buildconstraint Restricciones de construcción
buildmode Modos de construcción
c Llamada entre Go y C
cache construcción y prueba de caché
environment variables de entorno
filetype Tipos de ficheros
go.mod El fichero go.mod
gopath Variable de entorno GOPATH
gopath-get Obtener legacy GOPATH
goproxy Protocolo modulo proxy
importpath Sintaxis path de importación
modules Módulos, versión de módulos y más
module-get module-aware go get
module-auth Autenticación de módulos mediante go.sum
packages Listas de paquetes y patrones
private Configuración para la descarga de código no público
testflag testing flags
testfunc testing functions
vcs Control de versiones con GOVCS
Use "go help <topic>" para obtener más información sobre ese tema.

View File

@ -1,3 +1,4 @@
<<<<<<< HEAD:2022/es/Days/Go/hello.go
package main
import "fmt"
@ -5,3 +6,12 @@ import "fmt"
func main() {
fmt.Println("Until tomorrow #90DaysOfDevOps")
}
=======
package main
import "fmt"
func main() {
fmt.Println("Hasta mañana #90DaysOfDevOps")
}
>>>>>>> feature/translateES-03-adaptation:es/Days/Go/hello.go

View File

@ -1,52 +1,59 @@
## The Big Picture: DevOps & Learning a Programming Language
## El panorama general: DevOps y el aprendizaje de un lenguaje de programación
I think it is fair to say to be successful in the long term as a DevOps engineer you've got to know at least one programming language at a foundational level. I want to take this first session of this section to explore why this is such a critical skill to have, and hopefully, by the end of this week or section, you are going to have a better understanding of the why, how and what to do to progress with your learning journey.
Es justo decir que para tener éxito a largo plazo como ingeniero DevOps tienes que saber al menos un lenguaje de programación a nivel básico. En esta primera sesión de la nueva sección "Aprender un lenguaje de programación", se explorará por qué es una habilidad tan imprescindible tener conocimientos de los lenguajes de programación. Al final de esta semana o sección, adquiriremos una mejor comprensión del por qué, cómo y qué hacer para avanzar en este viaje del aprendizaje.
I think if I was to ask out on social do you need to have programming skills for DevOps related roles, the answer will be most likely a hard yes? Let me know if you think otherwise? Ok but then a bigger question and this is where you won't get such a clear answer which programming language? The most common answer I have seen here has been Python or increasingly more often, we're seeing Golang or Go should be the language that you learn.
Si preguntáramos en las redes sociales si es necesario tener conocimientos de programación para los puestos relacionados con DevOps, la respuesta sería un SÍ rotundo. Pero entonces surge una pregunta más relevante, y he aquí donde no podremos obtener una respuesta precisa: **¿qué lenguaje de programación?** La respuesta más común suele ser Python, el pico de aprendizaje quizá sea menor. También, cada vez más a menudo, estamos viendo que Golang o Go está cogiendo relevancia entre los lenguajes de iniciación.
To be successful in DevOps you have to have a good knowledge of programming skills is my takeaway from that at least. But we have to understand why we need it to choose the right path.
Para tener éxito en DevOps se debe tener un buen conocimiento de las habilidades de programación. Ahora, tenemos que entender por qué lo necesitamos para poder escoger el camino correcto.
## Understand why you need to learn a programming language.
## Entender por qué necesitas aprender un lenguaje de programación.
The reason that Python and Go are recommended so often for DevOps engineers is that a lot of the DevOps tooling is written in either Python or Go, which makes sense if you are going to be building DevOps tools. Now this is important as this will determine really what you should learn and that would likely be the most beneficial. If you are going to be building DevOps tools or you are joining a team that does then it would make sense to learn that same language, if you are going to be heavily involved in Kubernetes or Containers then it's more than likely that you would want to choose Go as your programming language. For me, the company I work for (Kasten by Veeam) is in the Cloud-Native ecosystem focused on data management for Kubernetes and everything is written in Go.
La razón por la que Python y Go se recomiendan tan a menudo para los ingenieros DevOps es que en muchas ocasiones las herramientas DevOps están escritas con estos lenguajes, lo cual tiene sentido si vas a construir herramientas DevOps o extender alguna de ellas. Ahora bien, esto es importante, ya que esto determinará realmente lo que se debe aprender y cuál será el más beneficioso.
- Si vas a construir herramientas DevOps o te unes a un equipo que lo hace tendrá sentido aprender ese mismo lenguaje.
- Si vas a estar muy involucrado en Kubernetes o Contenedores entonces es más que probable que quieras elegir Go como tu lenguaje de programación.
En el caso del autor, Michael Cade, la empresa para la que trabaja (Kasten by Veeam) está en el ecosistema Cloud-Native centrado en la gestión de datos para Kubernetes y todo está escrito en Go.
But then you might not have clear cut reasoning like that to choose you might be a student or transitioning careers with no real decision made for you. I think in this situation then you should choose the one that seems to resonate and fit with the applications you are looking to work with.
Puede que estos no sean unos razonamientos claros como para elegir, puede que estés aún estudiando o en transición por alguna carrera profesional sin una decisión real tomada. En esta situación deberás asegurarte de escoger el lenguaje de programación que encaje mejor con las aplicaciones que estás buscando para trabajar. Al fin y al cabo, si entiendes bien los conceptos de los lenguajes de programación, una vez aprendido bien cualquiera de ellos podrás aprender más rápido el resto.
Remember I am not looking to become a software developer here I just want to understand a little more about the programming language so that I can read and understand what those tools are doing and then that leads to possibly how we can help improve things.
Recuerda que en el camino de la filosofía DevOps no estas buscando convertirte en un desarrollador de software, lo que necesitas es entender un poco más sobre el lenguaje de programación para que puedas leer y entender lo que esas herramientas están haciendo. Esto nos ayudará a mejorar las cosas para proyectos concretos con necesidades especiales.
It is also important to know how you interact with those DevOps tools which could be Kasten K10 or it could be Terraform and HCL. These are what we will call config files and this is how you interact with those DevOps tools to make things happen, commonly these are going to be YAML. (We may use the last day of this section to dive a little into YAML)
También es importante saber cómo se interactúa con las herramientas DevOps que podrían ser [Kasten K10](https://www.kasten.io/) o podría ser [Terraform](https://www.terraform.io/) y [HCL](https://github.com/hashicorp/hcl). Esto es lo que llamaremos archivos de configuración y es cómo se interactúa con esas herramientas DevOps para hacer que las cosas sucedan. Comúnmente los ficheros serán YAML. (Más adelante veremos más detalles de los ficheros YAML)
## Did I just talk myself out of learning a programming language?
## ¿Acabo de convencerme de que no debo aprender un lenguaje de programación?
Most of the time or depending on the role, you will be helping engineering teams implement DevOps into their workflow, a lot of testing around the application and making sure that the workflow that is built aligns to those DevOps principles we mentioned over the first few days. But in reality, this is going to be a lot of the time troubleshooting an application performance issue or something along those lines. This comes back to my original point and reasoning, the programming language I need to know is the one that the code is written in? If their application is written in NodeJS it wont help much if you have a Go or Python badge.
La mayor parte del tiempo, o dependiendo del rol, estarás ayudando a los equipos de ingeniería a implementar DevOps en su flujo de trabajo, muchas pruebas alrededor de la aplicación y asegurándote de que el flujo de trabajo que se construye se alinea con esos principios de DevOps que mencionamos en los primeros días. En realidad, esto va a ser una gran parte de la solución de problemas de rendimiento de la aplicación o algo por el estilo. Esto vuelve al razonamiento original, el lenguaje de programación que necesitas saber es el código que está escrito en los proyectos o trabajos en los que estés o que te interesan. Si la aplicación está escrita en NodeJS no ayudará mucho si tienes veinte certificaciones de Go o Python.
## Why Go
## ¿Por qué Go?
Why Golang is the next programming language for DevOps, Go has become a very popular programming language in recent years. According to the StackOverflow Survey for 2021 Go came in fourth for the most wanted Programming, scripting and markup languages with Python being top but hear me out. [StackOverflow 2021 Developer Survey Most Wanted Link](https://insights.stackoverflow.com/survey/2021#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages)
Porque Golang es el próximo lenguaje de programación para DevOps, Go se ha convertido en un lenguaje de programación muy popular en los últimos años. Según la encuesta de StackOverflow del 2021, Go quedó en cuarto lugar entre los lenguajes de programación, scripting y markup más buscados, con Python a la cabeza:
As I have also mentioned some of the most known DevOps tools and platforms are written in Go such as Kubernetes, Docker, Grafana and Prometheus.
- [StackOverflow 2021 Developer Survey Most Wanted Link](https://insights.stackoverflow.com/survey/2021#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages)
What are some of the characteristics of Go that make it great for DevOps?
## Build and Deployment of Go Programs
Como también se ha mencionado, algunas de las herramientas y plataformas DevOps más conocidas están escritas en Go como Kubernetes, Docker, Grafana y Prometheus.
An advantage of using a language like Python that is interpreted in a DevOps role is that you dont need to compile a python program before running it. Especially for smaller automation tasks, you dont want to be slowed down by a build process that requires compilation even though, Go is a compiled programming language, **Go compiles directly into machine code**. Go is known also for fast compilation times.
¿Cuáles son algunas de las características de Go que lo hacen preferible para DevOps?
## Go vs Python for DevOps
## Construcción y despliegue de programas en Go
Go Programs are statically linked, this means that when you compile a go program everything is included in a single binary executable, and no external dependencies will be required that would need to be installed on the remote machine, this makes the deployment of go programs easy, compared to python program that uses external libraries you have to make sure that all those libraries are installed on the remote machine that you wish to run on.
Una ventaja de usar un lenguaje interpretado como Python en un rol de DevOps es que no necesitas compilar python antes de ejecutar el programa. Especialmente para las tareas de automatización más pequeñas, no te ralentiza el proceso de construcción que requiere la compilación. A pesar de que Go es un lenguaje de programación compilado, **Go compila directamente en código máquina**. Go es conocido también por sus rápidos tiempos de compilación.
Go is a platform-independent language, which means you can produce binary executables for \*all the operating systems, Linux, Windows, macOS etc and very easy to do so. With Python, it is not as easy to create these binary executables for particular operating systems.
## Go vs Python para DevOps
Go is a very performant language, it has fast compilation and fast run time with lower resource usage like CPU and memory especially compared to python, numerous optimisations have been implemented in the Go language that makes it so performant. (Resources below)
Los programas Go están enlazados estáticamente. Esto significa que cuando se compila un programa Go todo está incluido en un solo ejecutable binario, y no se requieren dependencias externas que tendrían que ser instaladas en la máquina remota. Esto facilita el despliegue de los programas Go, en comparación con el programa Python que utiliza bibliotecas externas y tienes que asegurarte tener todas esas bibliotecas instaladas en la máquina remota en la que se desea ejecutar.
Unlike Python which often requires the use of third party libraries to implement a particular python program, go includes a standard library that has the majority of functionality that you would need for DevOps built directly into it. This includes functionality file processing, HTTP web services, JSON processing, native support for concurrency and parallelism as well as built-in testing.
Go es un lenguaje independiente de la plataforma, lo que significa que puede producir ejecutables binarios para todos los sistemas operativos (Linux, Windows, macOS, etc), además de ser muy fácil de hacer. Con Python, no es tan fácil crear estos ejecutables binarios para determinados sistemas operativos.
This is by no way throwing Python under the bus I am just giving my reasons for choosing Go but they are not the above Go vs Python it's generally because it makes sense as the company I work for develops software in Go so that is why.
Go es un lenguaje muy eficiente, tiene una compilación rápida y un tiempo de ejecución rápido con un menor uso de recursos como la CPU y la memoria, especialmente en comparación con Python. Se han implementado numerosas optimizaciones en el lenguaje Go que lo hace muy eficiente. (Más abajo, en recursos puedes ver más detalles)
I will say that once you have or at least I am told as I am not many pages into this chapter right now, is that once you learn your first programming language it becomes easier to take on other languages. You're probably never going to have a single job in any company anywhere where you don't have to deal with managing, architect, orchestrating, debug JavaScript and Node JS applications.
A diferencia de Python, que a menudo requiere el uso de bibliotecas de terceros para implementar un programa de Python en particular, Go incluye una biblioteca estándar que tiene la mayoría de las funcionalidades que se necesitan para DevOps construidas directamente en ella. Esto incluye la funcionalidad de procesamiento de archivos, servicios web HTTP, procesamiento JSON, soporte nativo para la concurrencia y el paralelismo, así como pruebas incorporadas. 👀
## Resources
Con esto no se quiere decir de ninguna manera que debemos arrojar Python bajo un autobús, sólo se están dando razones subjetivas que hacen elegir Go al autor. No es el anterior "Go vs Python" lo que le hace escoger Go como lenguaje favorito, es porque tiene sentido para el trabajo en la empresa en la que trabaja y donde se desarrolla software en Go.
Como se ha comentado, una vez que se aprende el primer lenguaje de programación se hace más fácil de entender y aprender otros lenguajes. Probablemente nunca vas a tener un solo trabajo, en cualquier empresa o en cualquier proyecto, donde evites lidiar con la gestión, la arquitectura, la orquestación y la depuración de aplicaciones JavaScript y Node JS.
## Recursos
- [StackOverflow 2021 Developer Survey](https://insights.stackoverflow.com/survey/2021)
- [Why we are choosing Golang to learn](https://www.youtube.com/watch?v=7pLqIIAqZD4&t=9s)
@ -56,6 +63,6 @@ I will say that once you have or at least I am told as I am not many pages into
- [FreeCodeCamp - Learn Go Programming - Golang Tutorial for Beginners](https://www.youtube.com/watch?v=YS4e4q9oBaU&t=1025s)
- [Hitesh Choudhary - Complete playlist](https://www.youtube.com/playlist?list=PLRAV69dS1uWSR89FRQGZ6q9BR2b44Tr9N)
Now for the next 6 days of this topic, I intend to work through some of the resources listed above and document my notes for each day. You will notice that they are generally around 3 hours as a full course, I wanted to share my complete list so that if you have time you should move ahead and work through each one if time permits, I will be sticking to my learning hour each day.
En los próximos 6 días de esta sección la intención es trabajar a través de algunos de los recursos mencionados anteriormente y documentar con notas cada día. Generalmente son alrededor de 3 horas para un curso completo, pues se ha compartido la lista completa que ha considerado el autor para avanzar y trabajar a través de cada uno si el tiempo lo permite.
See you on [Day 8](day08.md).
Nos vemos en el [Día 8](day08.md).

View File

@ -1,60 +1,102 @@
## Setting up your DevOps environment for Go & Hello World
## Configurar tu entorno DevOps para Go y Hello World
Before we get into some of the fundamentals of Go we should get Go installed on our workstation and do what every "learning programming 101" module teaches us which is to create the Hello World app. As this one is going to be walking through the steps to get Go installed on your workstation we are going to attempt to document the process in pictures so people can easily follow along.
Antes de entrar en algunos de los fundamentos de Go debemos instalar Go en nuestra estación de trabajo y hacer lo que cada módulo de "aprendizaje de programación 101" nos enseña, que es crear la aplicación Hello World.
First of all, let's head on over to [go.dev/dl](https://go.dev/dl/) and you will be greeted with some available options for downloads.
Como esto va a ser caminar a través de los pasos para conseguir la instalación de Go vamos a tratar de documentar el proceso en imágenes para facilitar el seguimiento del proceso. _(Las capturas de pantalla pueden estar desactualizadas aun siendo tomadas en la última versión existente en el momento de escribir estas líneas)_.
En primer lugar, vamos a dirigirnos a [go.dev/dl](https://go.dev/dl/) y nos encontraremos con algunas opciones de descarga disponibles para distintos Sistemas Operativos.
![](Images/Day8_Go1.png)
If we made it this far you probably know which workstation operating system you are running so select the appropriate download and then we can get installing. I am using Windows for this walkthrough, basically, from this next screen, we can leave all the defaults in place for now. **_(I will note that at the time of writing this was the latest version so screenshots might be out of date)_**
Probablemente sepas qué sistema operativo tiene el equipo donde quiere efectuar la instalación, así que selecciona la descarga apropiada y luego podemos empezar a instalar. Estoy usando Windows para este tutorial, básicamente podemos dejar todos los valores predeterminados en el asistente de instalación.
![](Images/Day8_Go2.png)
Also note if you do have an older version of Go installed you will have to remove this before installing, Windows has this built into the installer and will remove and install as one.
También tenga en cuenta que si tienes una versión anterior de Go instalada tendrás que eliminarla antes de instalar, Windows tiene esta opción en el asistente de instalación, para eliminar e instalar de una.
Once finished you should now open a command prompt/terminal and we want to check that we have to Go installed. If you do not get the output that we see below then Go is not installed and you will need to retrace your steps.
Una vez que haya terminado, debe abrir un prompt del sistema/terminal (CMD o powershell en Windows) y para comprobar que la instalación de Go se ha efectuado podemos comprobar la versión con:
`go version`
```shell
go version
```
Si no obtienes la salida que vemos a continuación en la imagen, entonces Go no estará instalado y tendrás que volver sobre tus pasos para encontrar el error.
![](Images/Day8_Go3.png)
Next up we want to check our environment for Go. This is always good to check to make sure your working directories are configured correctly, as you can see below we need to make sure you have the following directory on your system.
A continuación comprobaremos nuestro entorno para Go. Siempre es bueno comprobar que tus directorios de trabajo están configuradas correctamente, como puedes ver a continuación necesitamos asegurarnos que tenemos el siguiente directorio en el sistema.
![](Images/Day8_Go4.png)
Did you check? Are you following along? You will probably get something like the below if you try and navigate there.
¿Lo has comprobado? ¿Estás siguiendo la pista? Probablemente obtendrás algo como lo que se muestra a continuación si tratas de navegar allí. (Desde Windows)
![](Images/Day8_Go5.png)
Ok, let's create that directory for ease I am going to use the mkdir command in my PowerShell terminal. We also need to create 3 folders within the Go folder as you will see also below.
En Linux queda creado el directorio con:
```shell
sudo apt install golang
```
Teniendo esta estructura:
```shell
#input
tree go -L 3
#output
go
└── pkg
└── mod
├── cache
├── cloud.google.com
├── github.com
├── go.etcd.io
├── golang.org
├── google.golang.org
├── gopkg.in
├── go.starlark.net@v0.0.0-20200306205701-8dd3e2ee1dd5
├── helm.sh
├── k8s.io
├── oras.land
└── sigs.k8s.io
```
Ok, en Windows debemos crear ese directorio. Se puede hacer fácilmente con el comando mkdir en PowerShell. También tenemos que crear 3 carpetas dentro de la carpeta Go como verás también a continuación.
```shell
mkdir go
cd go
mkdir pkg,bin,src
```
![](Images/Day8_Go6.png)
Now we have to Go installed and we have our Go working directory ready for action. We now need an integrated development environment (IDE) Now there are many out there available that you can use but the most common and the one I use is Visual Studio Code or Code. You can learn more about IDEs [here](https://www.youtube.com/watch?v=vUn5akOlFXQ).
Ya tenemos Go instalado y nuestro directorio de trabajo listo para la acción. Ahora necesitamos un entorno de desarrollo integrado (IDE). Hay muchos disponibles que puedes usar pero el más común y el que el autor usa es Visual Studio Code o Code. (El traductor también utiliza vscode pero en equipos remotos es mejor con [Vim](https://gitea.vergaracarmona.es/man-linux/Guia-VIM)) Puedes aprender más sobre los IDEs [aquí](https://www.youtube.com/watch?v=vUn5akOlFXQ).
If you have not downloaded and installed VSCode already on your workstation then you can do so by heading [here](https://code.visualstudio.com/download). As you can see below you have your different OS options.
Si no has descargado e instalado VSCode en tu equipo, puedes hacerlo [aquí](https://code.visualstudio.com/download). Como podrás ver tendrás opciones para los distintos Sistemas Operativos.
![](Images/Day8_Go7.png)
Much the same as with the Go installation we are going to download and install and keep the defaults. Once complete you can open VSCode you can select Open File and navigate to our Go directory that we created above.
Al igual que con la instalación de Go, vamos a descargar e instalar y mantener los valores predeterminados. Una vez completado puede abrir VSCode, seleccionar Abrir Archivo y navegar a nuestro directorio Go que hemos creado anteriormente.
![](Images/Day8_Go8.png)
You may get a popup about trust, read it if you want and then hit Yes, trust the authors. (I am not responsible later on though if you start opening things you don't trust!)
Puede que te aparezca un popup sobre la seguridad, léela y luego si lo consideras dale a Sí para confiar en los autores. (En este tutorial no nos hacemos responsables más tarde si empiezas a abrir cosas en las que no deberías confiar).
Now you should see the three folders we also created earlier as well and what we want to do now is right click the src folder and create a new folder called `Hello`
Ahora deberías ver las tres carpetas que creamos anteriormente. Hacemos clic derecho en la carpeta src y creamos una nueva carpeta llamada `Hello`.
![](Images/Day8_Go9.png)
Pretty easy stuff I would say up till this point? Now we are going to create our first Go Program with no understanding of anything we put in this next phase.
Hasta aquí todo muy fácil, diría que facilísimo. Ahora vamos a crear nuestro primer programa Go sin entender nada de lo que pongamos en esta siguiente fase.
Next, create a file called `main.go` in your `Hello` folder. As soon as you hit enter on the main.go you will be asked if you want to install the Go extension and also packages you can also check that empty pkg file that we made a few steps back and notice that we should have some new packages in there now?
Creamos un archivo llamado `main.go` dentro de la carpeta `Hello`. Tan pronto como pulses enter en el main.go se te preguntará si quieres instalar la extensión Go y también los paquetes, que puedes comprobar en el archivo pkg vacío que hicimos unos pasos atrás y notar que deberíamos tener algunos paquetes nuevos ahí dentro. ¿Correcto?
![](Images/Day8_Go10.png)
Now let's get this Hello World app going, copy the following code into your new main.go file and save that.
Ahora vamos a poner en marcha esta aplicación `Hola Mundo`, copia el siguiente código en tu nuevo archivo main.go y guárdalo.
```
```go
package main
import "fmt"
@ -64,30 +106,36 @@ func main() {
}
```
Now I appreciate that the above might make no sense at all, but we will cover more about functions, packages and more in later days. For now, let's run our app. Back in the terminal and in our Hello folder we can now check that all is working. Using the command below we can check to see if our generic learning program is working.
Es de entender que el anterior código puede no tener ningún sentido, pero veremos algo más sobre funciones, paquetes, entre otras cosas, en próximos días. Por ahora, vamos a ejecutar nuestra aplicación.
```
De vuelta en la terminal y en nuestra carpeta `Hello` podemos comprobar que todo está funcionando. Usando el siguiente comando podemos comprobar si nuestro programa de aprendizaje genérico está funcionando.
```go
go run main.go
```
Nos dirá Hola.
![](Images/Day8_Go11.png)
It doesn't end there though, what if we now want to take our program and run it on other Windows machines? We can do that by building our binary using the following command
Pero esto no termina aquí, ¿qué pasa si ahora queremos tomar nuestro programa y ejecutarlo en otras máquinas Windows? Podemos hacerlo construyendo nuestro binario con el siguiente comando
```
```go
go build main.go
```
![](Images/Day8_Go12.png)
If we run that, we would see the same output:
Si ejecutamos esto, veríamos la misma salida:
```bash
$ ./main.exe
#input
./main.exe
#output
Hello #90DaysOfDevOps
```
## Resources
## Recursos
- [StackOverflow 2021 Developer Survey](https://insights.stackoverflow.com/survey/2021)
- [Why we are choosing Golang to learn](https://www.youtube.com/watch?v=7pLqIIAqZD4&t=9s)
@ -97,6 +145,6 @@ Hello #90DaysOfDevOps
- [FreeCodeCamp - Learn Go Programming - Golang Tutorial for Beginners](https://www.youtube.com/watch?v=YS4e4q9oBaU&t=1025s)
- [Hitesh Choudhary - Complete playlist](https://www.youtube.com/playlist?list=PLRAV69dS1uWSR89FRQGZ6q9BR2b44Tr9N)
See you on [Day 9](day09.md).
Nos vemos en el [Día 9](day09.md).
![](Images/Day8_Go13.png)

View File

@ -1,65 +1,65 @@
## Let's explain the Hello World code
## Vamos a explicar el código de Hello World
### How Go works
### ¿Cómo funciona Go?
On [Day 8](day08.md) we walked through getting Go installed on your workstation and we then created our first Go application.
En el [Día 8](day08.md) realizamos la instalación de Go en el equipo y luego creamos nuestra primera aplicación Go.
In this section, we are going to take a deeper look into the code and understand a few more things about the Go language.
En esta sección, vamos a echar un vistazo más profundo al código y entender algunas cosillas más sobre el lenguaje Go.
### What is Compiling?
### ¿Qué es la compilación?
Before we get into the [6 lines of the Hello World code](Go/hello.go) we need to have a bit of an understanding of compiling.
Antes de ver las [5 líneas del código de Hello](Go/hello.go) necesitamos entender un poco la compilación.
Programming languages that we commonly use such as Python, Java, Go and C++ are high-level languages. Meaning they are human-readable but when a machine is trying to execute a program it needs to be in a form that a machine can understand. We have to translate our human-readable code to machine code which is called compiling.
Los lenguajes de programación que utilizamos habitualmente, como Python, Java, Go y C++, son lenguajes de alto nivel. Esto significa que son legibles para el ser humano. Cuando una máquina intenta ejecutar un programa, éste debe tener una forma que la máquina pueda entender. Con lo cuál, tenemos que traducir nuestro código legible para el ser humano a código legible para la máquina (Código máquina). Esta acción es a lo que se le llama **compilar**.
![](Images/Day9_Go1.png)
From the above you can see what we did on [Day 8](day08.md) here, we created a simple Hello World main.go and we then used the command `go build main.go` to compile our executable.
Si no sabes de lo que estamos hablando mejor vuelve a ver lo que hicimos en el [Día 8](day08.md), creamos un simple Hello World en el fichero `main.go` y luego compilamos nuestro ejecutable con el comando `go build main.go`.
### What are packages?
### ¿Qué son los paquetes?
A package is a collection of source files in the same directory that are compiled together. We can simplify this further, a package is a bunch of .go files in the same directory. Remember our Hello folder from Day 8? If and when you get into more complex Go programs you might find that you have folder1 folder2 and folder3 containing different.go files that make up your program with multiple packages.
Un paquete es una colección de archivos fuente en el mismo directorio que se compilan juntos. En el caso que nos ocupa con nuestro paquete, un grupo de archivos .go en el mismo directorio. ¿Recuerdas nuestra carpeta Hello del [día 8](day08.md)? Cuando realizas programas Go más complejos puedes encontrar que tienes la carpeta1, la carpeta2 y la carpeta3 que contienen diferentes ficheros .go que componen tu programa con múltiples paquetes.
We use packages so we can reuse other people's code, we don't have to write everything from scratch. Maybe we are wanting a calculator as part of our program, you could probably find an existing Go Package that contains the mathematical functions that you could import into your code saving you a lot of time and effort in the long run.
Utilizamos paquetes para poder reutilizar el código de otras personas, no tenemos que escribir todo desde cero. Tal vez queremos una calculadora como parte de nuestro programa, probablemente podrías encontrar un paquete Go existente que contenga las funciones matemáticas que podrías importar a tu código ahorrando mucho tiempo. La belleza de compartir el código y el Open Source.
Go encourages you to organise your code in packages so that it is easy to reuse and maintain source code.
Go te anima a organizar tu código en paquetes para que sea fácil reutilizar y mantener el código fuente.
### Hello #90DaysOfDevOps Line by Line
### Hello #90DaysOfDevOps línea a línea
Now let's take a look at our Hello #90DaysOfDevOps main.go file and walk through the lines.
Ahora echemos un vistazo a nuestro archivo main.go de Hello #90DaysOfDevOps recorriendo cada línea.
![](Images/Day9_Go2.png)
In the first line, you have `package main` which means that this file belongs to a package called main. All .go files need to belong to a package, they should also have `package something` in the opening line.
En la primera línea tienes `package main`. Significa que este fichero pertenece a un paquete llamado main. Todos los ficheros .go deben pertenecer a un paquete, también deben tener `package <lo-que-sea>` en la línea inicial.
A package can be named whatever you wish. We have to call this `main` as this is the starting point of the program that is going to be in this package, this is a rule. (I need to understand more about this rule?)
Un paquete puede llamarse como quieras. En este caso tenemos que llamarlo `main` ya que es el punto de partida del programa que va a estar en este paquete, esto es una regla.
![](Images/Day9_Go3.png)
Whenever we want to compile and execute our code we have to tell the machine where the execution needs to start. We do this by writing a function called main. The machine will look for a function called main to find the entry point of the program.
Siempre que queramos compilar y ejecutar nuestro código tenemos que decirle a la máquina dónde tiene que empezar la ejecución. Lo hacemos escribiendo una función llamada main. La máquina buscará una función llamada main para encontrar el punto de entrada del programa.
A function is a block of code that can do some specific task and can be used across the program.
Una función es un bloque de código que puede hacer alguna tarea específica y puede ser utilizada en todo el programa.
You can declare a function with any name using `func` but in this case, we need to name it `main` as this is where the code starts.
Puedes declarar una función con cualquier nombre usando `func` pero en este caso, necesitamos nombrarla `main` porque, como hemos comentado, es donde comienza el código.
![](Images/Day9_Go4.png)
Next, we are going to look at line 3 of our code, the import, this means you want to bring in another package to your main program. fmt is a standard package being used here provided by Go, this package contains the `Println()` function and because we have imported this we can use this in line 6. There are several standard packages you can include in your program and leverage or reuse them in your code saving you the hassle of having to write from scratch. [Go Standard Library](https://pkg.go.dev/std)
A continuación, vamos a ver la línea 3 de nuestro código, la importación, esto significa que quieres traer otro paquete a tu programa principal. fmt es un paquete estándar que se está proporcionado por Go, este paquete contiene la función `Println()` y porque importamos esto podemos usarla en la línea 6. Hay varios paquetes estándar que puedes incluir en tu programa y aprovecharlos o reutilizarlos en tu código ahorrando la molestia de tener que escribir desde cero. [Go Standard Library](https://pkg.go.dev/std)
![](Images/Day9_Go5.png)
the `Println()` that we have here is a way in which to write standard output to the terminal where ever the executable has been executed successfully. Feel free to change the message in between the ().
El `Println()` que tenemos aquí es una forma de escribir la salida estándar en la terminal donde se ha ejecutado el ejecutable con éxito. Siéntete libre de cambiar el mensaje entre los paréntesis.
![](Images/Day9_Go6.png)
### TLDR
- **Line 1** = This file will be in the package called `main` and this needs to be called `main` because includes the entry point of the program.
- **Line 3** = For us to use the `Println()` we have to import the fmt package to use this on line 6.
- **Line 5** = The actual starting point, its the `main` function.
- **Line 6** = This will let us print "Hello #90DaysOfDevOps" on our system.
- **Línea 1** = Este archivo estará en el paquete llamado `main` y es necesario que se llame `main` porque incluye el punto de entrada del programa.
- **Línea 3** = Para que podamos utilizar el `Println()` tenemos que importar el paquete fmt para utilizarlo en la línea 6.
- **Línea 5** = El punto de entrada real, es la función `main`.
- **Línea 6** = Esto nos permitirá imprimir "Hello #90DaysOfDevOps" en nuestro terminal.
## Resources
## Recursos
- [StackOverflow 2021 Developer Survey](https://insights.stackoverflow.com/survey/2021)
- [Why we are choosing Golang to learn](https://www.youtube.com/watch?v=7pLqIIAqZD4&t=9s)
@ -69,4 +69,4 @@ the `Println()` that we have here is a way in which to write standard output to
- [FreeCodeCamp - Learn Go Programming - Golang Tutorial for Beginners](https://www.youtube.com/watch?v=YS4e4q9oBaU&t=1025s)
- [Hitesh Choudhary - Complete playlist](https://www.youtube.com/playlist?list=PLRAV69dS1uWSR89FRQGZ6q9BR2b44Tr9N)
See you on [Day 10](day10.md).
Nos vemos en el [Día 10](day10.md).

View File

@ -1,34 +1,56 @@
### The Go Workspace
## The Go Workspace
On [Day 8](day08.md) we briefly covered the Go workspace to get Go up and running to get to the demo of `Hello #90DaysOfDevOps` But we should explain a little more about the Go workspace.
En el [Día 8](day08.md) hablamos brevemente del espacio de trabajo Go para poner en marcha Go y llegar a la demo de `Hello #90DaysOfDevOps`. Hay que explicar un poco más sobre el espacio de trabajo Go.
Remember we chose the defaults and we then went through and created our Go folder in the GOPATH that was already defined but in reality, this GOPATH can be changed to be wherever you want it to be.
¿Recuerda que elegimos los valores predeterminados y luego pasamos a crear nuestra carpeta Go en el GOPATH que ya estaba definido? Pero en realidad, este GOPATH se puede cambiar para que esté donde quieras.
If you run
Si ejecutas
```
echo $GOPATH
```
The output should be similar to mine (with a different username may be) which is:
La salida debería ser similar a la mía (con tu nombre de usuario):
```
/home/michael/projects/go
```
> **En Linux tenemos que configurarlo.**
>
> En mi caso que utilizo la shell zsh en el fichero `$HOME/.zshrc`. Si utilizan bash será en el fichero `$HOME/.bashrc`.
>
> Tan solo tenemos que añadir esta línea:
> ```shell
> export GOPATH=$HOME/work
> export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
> ```
>
> ![](Images/Day10_Go0.png)
>
> Relanzamos la shell y hacemos el `echo` mencionado antes.
>
> ```shell
> exec zsh
> echo $GOPATH
> ```
>
> ![](Images/Day10_Go0b.png)
>
> Más información en la [documentación oficial](https://go.dev/doc/install)
Then here, we created 3 directories. **src**, **pkg** and **bin**
Entonces aquí, es donde creamos en anteriores días los 3 directorios. **src**, **pkg** y **bin**
![](Images/Day10_Go1.png)
![](Images/Day10_Go1.png)
**src** is where all of your Go programs and projects are stored. This handles namespacing package management for all your Go repositories. This is where you will see on our workstation we have our Hello folder for the Hello #90DaysOfDevOps project.
- **src** es donde se almacenan todos tus programas y proyectos Go. Esto maneja la gestión de paquetes de namespacing para todos sus repositorios de Go. Aquí es donde verás que en nuestro equipo tenemos nuestra carpeta Hello para el proyecto Hello #90DaysOfDevOps.
![](Images/Day10_Go2.png)
**pkg** is where your archived files of packages that are or were installed in programs. This helps to speed up the compiling process based on if the packages being used have been modified.
- **pkg** es donde se encuentran los ficheros archivados de los paquetes que están o estuvieron instalados en los programas. Esto ayuda a acelerar el proceso de compilación en función de si los paquetes que se utilizan han sido modificados.
![](Images/Day10_Go3.png)
**bin** is where all of your compiled binaries are stored.
- **bin** es donde se almacenan todos los binarios compilados.
![](Images/Day10_Go4.png)
@ -36,47 +58,49 @@ Our Hello #90DaysOfDevOps is not a complex program so here is an example of a mo
![](Images/Day10_Go5.png)
This page also goes into some great detail about why and how the layout is like this it also goes a little deeper on other folders we have not mentioned [GoChronicles](https://gochronicles.com/project-structure/)
Nuestro Hello #90DaysOfDevOps no es un programa complejo. Para que te hagas una idea, un ejemplo de un programa Go más complejo tomado de otro gran recurso que vale la pena mirar es [GoChronicles](https://gochronicles.com/)
### Compiling & running code
## Compiling & running code
On [Day 9](day09.md) we also covered a brief introduction to compiling code, but we can go a little deeper here.
En el [Día 9](day09.md) también hicimos una breve introducción a la compilación de código, pero podemos profundizar un poco más. Vamos a ello.
To run our code we first must **compile** it. There are three ways to do this within Go.
Para ejecutar nuestro código, primero debemos **compilarlo**. Hay tres maneras de hacer esto dentro de Go.
- go build
- go install
- go run
- `go build`
- `go install`
- `go run`
Before we get to the above compile stage we need to take a look at what we get with the Go Installation.
Antes de que lleguemos a la etapa de compilación mencionada, necesitamos echar un vistazo a lo que obtenemos con la instalación de Go.
When we installed Go on Day 8 we installed something known as Go tools which consist of several programs that let us build and process our Go source files. One of the tools is `Go`
Cuando instalamos Go el [día 8](day08.md), instalamos algo conocido como herramientas Go, que consiste en varios programas que nos permiten construir y procesar nuestros ficheros fuente Go. Una de las herramientas es `Go`.
It is worth noting that you can install additional tools that are not in the standard Go installation.
Vale la pena señalar que se pueden instalar herramientas adicionales que no están en la instalación estándar de Go que pueden ser muy útil según el proyecto que quieras desarrollar.
If you open your command prompt and type `go` you should see something like the image below and then you will see "Additional Help Topics" below that for now we don't need to worry about those.
Si abres tu terminal y escribes `go` deberías ver algo como la imagen de abajo y luego verás "Additional Help Topics" (Temas de ayuda adicionales) de los que, por ahora, no necesitamos preocuparnos.
![](Images/Day10_Go6.png)
You might also remember that we have already used at least two of these tools so far on Day 8.
> [Traducción ayuda go](Go/Ayuda_go_traducida.md).
Si estás aquí desde días anteriores, recordarás que ya hemos utilizado al menos dos de estos comandos en el [Día 8](day08.md).
![](Images/Day10_Go7.png)
The ones we want to learn more about are the build, install and run.
Las que vamos a aprender son las de `build`, `install` y `run`.
![](Images/Day10_Go8.png)
- `go run` - This command compiles and runs the main package comprised of the .go files specified on the command line. The command is compiled to a temporary folder.
- `go build` - To compile packages and dependencies, compile the package in the current directory. If the `main` package, will place the executable in the current directory if not then it will place the executable in the `pkg` folder. `go build` also enables you to build an executable file for any Go Supported OS platform.
- `go install` - The same as go build but will place the executable in the `bin` folder
- `go run` - Este comando compila y ejecuta el paquete principal compuesto por los ficheros .go especificados en la línea de comandos. El comando se compila en una carpeta temporal.
- `go build` - Para compilar los paquetes y las dependencias, compila el paquete en el directorio actual. Así el paquete `main`, colocará el ejecutable en el directorio actual, si no colocará el ejecutable en la carpeta `pkg`. `go build` también permite construir un fichero ejecutable para cualquier sistema operativo compatible con Go.
- `go install` - Lo mismo que `go build` pero colocará el ejecutable en la carpeta `bin`.
We have run through go build and go run but feel free to run through them again here if you wish, `go install` as stated above puts the executable in our bin folder.
Ya hemos visto go build y go run, pero si quieres puedes volver a hacer un `go install`, como ya hemos dicho, coloca el ejecutable en nuestra carpeta bin.
![](Images/Day10_Go9.png)
Hopefully, if you are following along you are watching one of the playlists or videos below, I am taking bits of all of these and translating these into my notes so that I can understand the foundational knowledge of the Golang language. The resources below are likely going to give you a much better understanding of a lot of the areas you need overall but I am trying to document the 7 days or 7 hours worth of the journey with interesting things that I have found.
Si estás siguiendo los recursos con las listas de reproducción o videos que se proponen abajo verás que se están tomando pedazos de estos traducidos en estas notas para poder adquirir un conocimiento básico del lenguaje Golang. Estos recursos probablemente darán una comprensión mucho mejor de una gran cantidad de las áreas que necesita en general, pero se está intentando de documentar los 7 días (o 7 horas) en lo más relevante.
## Resources
## Recursos
- [StackOverflow 2021 Developer Survey](https://insights.stackoverflow.com/survey/2021)
- [Why we are choosing Golang to learn](https://www.youtube.com/watch?v=7pLqIIAqZD4&t=9s)
@ -86,4 +110,4 @@ Hopefully, if you are following along you are watching one of the playlists or v
- [FreeCodeCamp - Learn Go Programming - Golang Tutorial for Beginners](https://www.youtube.com/watch?v=YS4e4q9oBaU&t=1025s)
- [Hitesh Choudhary - Complete playlist](https://www.youtube.com/playlist?list=PLRAV69dS1uWSR89FRQGZ6q9BR2b44Tr9N)
See you on [Day 11](day11.md).
Nos vemos en el [Día 11](day11.md).

View File

@ -1,28 +1,28 @@
Before we get into the topics for today I want to give a massive shout out to [Techworld with Nana](https://www.youtube.com/watch?v=yyUHQIec83I) and this fantastic concise journey through the fundamentals of Go.
Antes de empezar con los temas de hoy mandamos un gran saludo a [Techworld con Nana](https://www.youtube.com/watch?v=yyUHQIec83I) y a ese fantástico y conciso viaje a través de los fundamentos básicos de Go.
On [Day8](day08.md) we set our environment up, on [Day9](day09.md) we walked through the Hello #90DaysOfDevOps code and on [Day10](day10.md)) we looked at our Go workspace and went a little deeper into compiling and running the code.
En el [Día 8](day08.md) configuramos nuestro entorno, en el [Día 9](day09.md) recorrimos el código de Hello #90DaysOfDevOps y en el [Día 10](day10.md)) vimos nuestro workspace Go y profundizamos un poco sobre la compilación y ejecución del código.
Today we are going to take a look into Variables, Constants and Data Types whilst writing a new program.
Hoy vamos a echar un vistazo a las Variables, Constantes y Tipos de Datos escribiendo un nuevo programa.
## Variables & Constants in Go
## Variables y Constantes en Go
Let's start by planning our application, I think it would be a good idea to work on a program that tells us how many days we have remained in our #90DaysOfDevOps challenge.
Empecemos por planificar nuestra aplicación, parece una buena idea trabajar en un programa que nos diga cuántos días hemos permanecido en nuestro reto #90DaysOfDevOps.
The first thing to consider here is that as we are building our app and we are welcoming our attendees and we are giving the user feedback on the number of days they have completed we might use the term #90DaysOfDevOps many times throughout the program. This is a great use case to make #90DaysOfDevOps a variable within our program.
Lo primero que hay que tener en cuenta aquí es que a medida que construyamos nuestra app, demos la bienvenida a nuestros asistentes y vayamos dando el feedback al usuario sobre el número de días que ha completado, a lo largo del programa, podríamos utilizar el término #90DaysOfDevOps muchas veces. Así que aquí tenemos una oportunidad de hacer una variables con #90DaysOfDevOps para nuestro programa.
- Variables are used to store values.
- Like a little box with our saved information or values.
- We can then use this variable across the program which also benefits that if this challenge or variable changes then we only have to change this in one place. This means we could translate this to other challenges we have in the community by just changing that one variable value.
- Las variables se utilizan para almacenar valores.
- Son como una pequeña caja con nuestra información o valores guardados (Así lo explican todos los docentes a quienes empiezan 😊).
- Podremos utilizar esta variable en todo el programa, lo que también beneficia a que si este reto o la variable cambia, sólo tendremos que cambiar el valor en un solo lugar. Esto significa que podemos trasladar esto a otros retos que tenemos en la comunidad con sólo cambiar el valor de esa variable.
To declare this in our Go Program we define a value by using a **keyword** for variables. This will live within our `func main` block of code that you will see later. You can find more about [Keywords](https://go.dev/ref/spec#Keywords)here.
Para declarar esto en nuestro programa Go definimos un valor utilizando una **keywords** para las variables. Esto permanecerá dentro de nuestro bloque de código `func main` que verás más adelante. Puedes encontrar más información sobre Keywords [aquí](https://go.dev/ref/spec#Keywords).
Remember to make sure that your variable names are descriptive. If you declare a variable you must use it or you will get an error, this is to avoid possible dead code, code that is never used. This is the same for packages not used.
Recuerda asegurarte de que los nombres de tus variables sean descriptivos. Si declaras una variable debes usarla o recibirás un error, esto es para evitar posible dead code, código que nunca se usa. Lo mismo ocurre con los paquetes que no se utilizan.
```
var challenge = "#90DaysOfDevOps"
```
With the above set and used as we will see in the next code snippet you can see from the output below that we have used a variable.
Con lo anterior establecido vamos a utilizarlo en el siguiente fragmento de código. Se puede ver en la salida de abajo que hemos utilizado la variable.
```
package main
@ -35,15 +35,15 @@ func main() {
}
```
You can find the above code snippet in [day11_example1.go](Go/day11_example1.go)
Puedes encontrar el código anterior en el fichero [day11_example1.go](Go/day11_example1.go).
You will then see from the below that we built our code with the above example and we got the output shown below.
A continuación verás que hemos construido nuestro código con el ejemplo anterior y hemos obtenido la salida que se muestra a continuación.
![](Images/Day11_Go1.png)
We also know that our challenge is 90 days at least for this challenge, but next, maybe it's 100 so we want to define a variable to help us here as well. However, for our program, we want to define this as a constant. Constants are like variables, except that their value cannot be changed within code (we can still create a new app later on down the line with this code and change this constant but this 90 will not change whilst we are running our application)
Sabemos que este reto en concreto es de 90 días, pero el próximo, quizás sea de 100 por lo que definiremos una variable que nos ayude aquí también. Sin embargo, para nuestro programa, queremos definirla como una constante. Las constantes son como las variables, excepto que su valor no puede ser cambiado dentro del código (aunque podemos crear una nueva aplicación más adelante con el mismo código y cambiar la constante. El 90 no cambiará mientras estemos ejecutando esta aplicación)
Adding the `const` to our code and adding another line of code to print this.
Añadiendo `const` a nuestro código y añadiendo otra línea de código para imprimir esto.
```
package main
@ -59,15 +59,15 @@ func main() {
}
```
You can find the above code snippet in [day11_example2.go](Go/day11_example2.go)
Puedes encontrar el código anterior en[day11_example2.go](Go/day11_example2.go).
If we then go through that `go build` process again and run you will see below the outcome.
Si a continuación volvemos a pasar por ese proceso de `go build` y lo ejecutamos veremos a continuación el resultado.
![](Images/Day11_Go2.png)
Finally, and this won't be the end of our program we will come back to this in [Day12](day12.md) to add more functionality. We now want to add another variable for the number of days we have completed the challenge.
Por último añadiremos otra variable para el número de días que hemos completado. Pero esto no será el final de nuestro programa, seguiremos con nuestro programa el [Día 12](day12.md) para añadir más funcionalidad.
Below I added the `dayscomplete` variable with the number of days completed.
A continuación verás añadida la variable `dayscomplete` con el número de días completados.
```
package main
@ -85,17 +85,19 @@ func main() {
}
```
You can find the above code snippet in [day11_example3.go](Go/day11_example3.go)
Puedes encontrar el código anterior en [day11_example3.go](Go/day11_example3.go)
Let's run through that `go build` process again or you could just use `go run`
Volvamos a ejecutar compilando con `go build` y ejecutando el fichero compilado o directamente usando `go run`.
![](Images/Day11_Go3.png)
Here are some other examples that I have used to make the code easier to read and edit. We have up till now been using `Println` but we can simplify this by using `Printf` by using `%v` which means we define our variables in order at the end of the line of code. we also use `\n` for a line break.
Aquí hay algunos ejemplos para hacer el código más fácil de leer y editar. Hasta ahora hemos estado usando `Println` pero podemos simplificar cambiando el `Printf` por `%v` lo que definirá nuestras variables en orden al final de la línea de código. También vamos a usar `\n` para un salto de línea.
I am using `%v` as this uses a default value but there are other options that can be found here in the [fmt package documentation](https://pkg.go.dev/fmt) you can find the code example [day11_example4.go](Go/day11_example4.go)
Usando `%v` tendremos un valor por defecto, pero hay otras opciones que se pueden encontrar en la [documentación del paquete fmt](https://pkg.go.dev/fmt).
Variables may also be defined in a simpler format in your code. Instead of defining that it is a `var` and the `type` you can code this as follows to get the same functionality but a nice cleaner and simpler look for your code. This will only work for variables though and not constants.
Se pone interesante la cosa, puedes ver el código de ejemplo [day11_example4.go](Go/day11_example4.go)
Las variables también pueden ser definidas en un formato más simple aun. En vez de definir `var` y el "tipo" puedes codificarla de la siguiente manera para obtener la misma funcionalidad pero con un aspecto más limpio y sencillo. Esto sólo funcionará para las variables y no para las constantes.
```
func main() {
@ -103,55 +105,53 @@ func main() {
const daystotal = 90
```
## Data Types
## Tipos de datos
In the above examples, we have not defined the type of variables, this is because we can give it a value here and Go is smart enough to know what that type is or at least can infer what it is based on the value you have stored. However, if we want a user to input this will require a specific type.
En los ejemplos anteriores, no hemos definido el tipo de las variables, esto es porque podemos darle un valor y Go es lo suficientemente inteligente como para saber de qué tipo se trata o al menos puede inferir cuál es en base al valor que ha almacenado. Sin embargo, si queremos que un usuario ingrese esto requerirá un tipo específico.
We have used Strings and Integers in our code so far. Integers for the number of days and strings are for the name of the challenge.
Hasta ahora hemos utilizado Strings y Integers en nuestro código. Los integer para el número de días y los strings para el nombre del reto.
It is also important to note that each data type can do different things and behaves differently. For example, integers can multiply where strings do not.
Es importante tener en cuenta que cada tipo de datos puede hacer cosas diferentes y se comporta de forma distinta. Por ejemplo, los integer pueden multiplicarse mientras que las cadenas no.
There are four categories
Hay cuatro categorías:
- **Basic type**: Numbers, strings, and booleans come under this category.
- **Aggregate type**: Array and structs come under this category.
- **Reference type**: Pointers, slices, maps, functions, and channels come under this category.
- **Tipo Basic**: Los números, las cadenas y los booleanos entran en esta categoría.
- **Tipo Aggregate**: Los arrays y los structs entran en esta categoría.
- **Tipo Reference**: Pointers, slices, maps, functions, y channels se incluyen en esta categoría.
- **Interface type**
The data type is an important concept in programming. Data type specifies the size and type of variable values.
El tipo de datos es un concepto importante en la programación, pues especifica el tamaño y el tipo de los valores de las variables.
Go is statically typed, meaning that once a variable type is defined, it can only store data of that type.
Go está tipado estáticamente, lo que significa que una vez que se define un tipo de variable, sólo puede almacenar datos de ese tipo.
Go has three basic data types:
Go tiene tres tipos de datos básicos:
- **bool**: represents a boolean value and is either true or false
- **Numeric**: represents integer types, floating-point values, and complex types
- **string**: represents a string value
- **bool**: representa un valor booleano, es verdadero o falso
- **Numeric**: representa tipos integer, valores de punto float y tipos complejos.
- **string**: representa un valor de cadena
I found this resource super detailed on data types [Golang by example](https://golangbyexample.com/all-data-types-in-golang-with-examples/)
Este recurso está súper detallado sobre los tipos de datos: [Golang by example](https://golangbyexample.com/all-data-types-in-golang-with-examples/).
I would also suggest [Techworld with Nana](https://www.youtube.com/watch?v=yyUHQIec83I&t=2023s) at this point covers in detail a lot about the data types in Go.
If we need to define a type in our variable we can do this like so:
Si necesitamos definir un tipo en nuestra variable podemos hacerlo así:
```
var TwitterHandle string
var DaysCompleted uint
```
Because Go implies variables where a value is given we can print out those values with the following:
Como Go implica variables donde se da un valor podemos imprimir esos valores con lo siguiente:
```
fmt.Printf("challenge is %T, daystotal is %T, dayscomplete is %T\n", conference, daystotal, dayscomplete)
```
There are many different types of integer and float types the links above will cover these in detail.
Hay muchos tipos diferentes de integer y floats.
- **int** = whole numbers
- **unint** = positive whole numbers
- **floating point types** = numbers that contain a decimal component
- **int** = números enteros
- **unint** = números enteros positivos
- **floating point types** = números que contienen un componente decimal
## Resources
## Recursos
- [StackOverflow 2021 Developer Survey](https://insights.stackoverflow.com/survey/2021)
- [Why we are choosing Golang to learn](https://www.youtube.com/watch?v=7pLqIIAqZD4&t=9s)
@ -161,6 +161,6 @@ There are many different types of integer and float types the links above will c
- [FreeCodeCamp - Learn Go Programming - Golang Tutorial for Beginners](https://www.youtube.com/watch?v=YS4e4q9oBaU&t=1025s)
- [Hitesh Choudhary - Complete playlist](https://www.youtube.com/playlist?list=PLRAV69dS1uWSR89FRQGZ6q9BR2b44Tr9N)
Next up we are going to start adding some user input functionality to our program so that we are asked how many days have been completed.
En el próximo día vamos a empezar a añadir alguna funcionalidad de entrada, para que el usuario pueda añadir datos en nuestro programa, por ejemplo, los días que se han completado.
See you on [Day 12](day12.md).
Nos vemos en el [Día 12](day12.md).

View File

@ -4,8 +4,6 @@
<img src="logo.png?raw=true" alt="90DaysOfDevOps Logo" width="50%" height="50%" />
</p>
English Version | [中文版本](zh_cn/README.md) | [繁體中文版本](zh_tw/README.md)| [日本語版](ja/README.md) | [Wersja Polska](pl/README.md) | [Tiếng Việt](vi/README.md)
This repository is used to document my journey on getting a better foundational knowledge of "DevOps".
[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N33YRCS)
@ -19,12 +17,12 @@ The quickest way to get in touch is going to be via Twitter, my handle is [@Mich
- Secure Coding (SAST, SCA, Secure Code Review) (Prateek Jain - @PrateekJainDev)
- Continuous Build, Integration, Testing (Container & Image scan, DAST, Fuzzing, IAST) (Anton Sankov - @a_sankov)
- **Continuous Delivery & Deployment (Sign, Image Repo scan, Systems, Containers, Network Vulnerability scan)**
- *Runtime Defence & Monitoring (RASP, Pen Testing)
- **Runtime Defence & Monitoring (RASP, Pen Testing)**
- Secrets Management (Bryan Krausen - @btkrausen)
- Python (Rishab Kumar - @rishabk7)
- Cloud (Chris Williams - @mistwire)
- OpenShift (Dean Lewis - @saintdle)
- **Databases**
- Database (Taylor & Andrew)
- Serverless (Carlos Santana - @csantanapr)
- Service Mesh (Marino W - @virtualized6ix) / (William Morgan - @wm)
- **Another Topic**
@ -151,7 +149,7 @@ The quickest way to get in touch is going to be via Twitter, my handle is [@Mich
- [] 📈 82 > [](2023/day82.md)
- [] 📈 83 > [](2023/day83.md)
### Store & Protect Your Data
###
- [] 🗃️ 84 > [](2023/day84.md)
- [] 🗃️ 85 > [](2023/day85.md)