¡Go! - Tomando los primeros pasos con el lenguaje Go.
Tags: go, latam, programming, beginners
Published: 2023-08-25 22:44:11

En este primer artículo, hablaremos sobre el lenguaje Go y cómo dar los primeros pasos. El motivo de comenzar a escribir sobre Go es que he estado trabajando con él a diario durante un tiempo y lo veo como una excelente opción para aprender, usar y con diversas aplicaciones debido a que es un lenguaje de propósito general. Sin embargo, a pesar de ser de propósito general, es importante recordar que no es una solución universal y que existen escenarios donde puede ser una mejor opción que otros lenguajes. Comencemos, entonces, proporcionando un poco de contexto sobre Go.

## Una breve historia de Go
Go es un lenguaje de programación creado en 2007 por tres empleados de Google en ese momento: Robert Griesemer, Rob Pike y Ken Thompson. Sin embargo, fue lanzado oficialmente por Google en 2009. Desde entonces, ha ganado popularidad entre los desarrolladores de software, principalmente por su eficiencia y rendimiento. Go es un lenguaje compilado y estático, con tipado fuerte y estructuras de control de flujo comunes. Al combinar estas características, obtenemos un lenguaje que nos brinda facilidades para crear programas concurrentes.

Para explicar un poco sobre la concurrencia y para que no te sientas perdido, y de manera muy resumida (enfocándonos en dar una idea general y no en la programación concurrente en sí): en la programación, la concurrencia es la habilidad de un programa para ejecutar más de una tarea al mismo tiempo. Ahora, es posible que estés preguntándote por qué usé el término "conciencia" en lugar de "paralelismo". Si es así, te lo explicaré en otro artículo sobre concurrencia y paralelismo en Go, ¿te parece?

El lenguaje Go nació con muchas herramientas ya listas para usar. Esto se debe a que es un lenguaje nuevo y sus creadores tomaron lecciones de otros lenguajes para diseñarlo con muchas consideraciones previas, que lenguajes más antiguos habían adquirido a lo largo de su evolución. Como resultado, el lenguaje Go viene con varias herramientas nativas, como su compilador y una amplia lista de bibliotecas por defecto, o como las llamaremos más adelante, paquetes. Desde su creación, el lenguaje también ha promovido la simplicidad y las buenas prácticas, facilitando la vida de quienes lo utilizan para desarrollar aplicaciones.

Entonces, dejando de lado el brillo de Go por un momento, también podemos usarlo en otros casos, como para crear una API o un programa ejecutable desde la línea de comandos (las famosas aplicaciones CLI), por ejemplo. Además, un detalle interesante es que veo a Go compitiendo con Python en ciertos escenarios, ya que Python sigue siendo un lenguaje muy utilizado para estos casos. Sin embargo, esto no significa que uno sea mejor o peor que el otro, ¡simplemente significa que ahora tenemos más opciones!

Y así podemos continuar con este artículo, donde daremos los primeros pasos con el lenguaje Go para ofrecer una breve introducción. La idea es crear otros artículos que exploren más a fondo el lenguaje Go, con un enfoque y un estilo diferentes a los que normalmente se encuentran. ¿Listos?

## Instalando el lenguaje Go
Antes de comenzar a programar en Go, es necesario tener el lenguaje instalado en tu máquina. El proceso de instalación es bastante sencillo y se puede realizar a través del sitio oficial de Go. Para hacerlo, después de acceder al sitio oficial, debes hacer clic en el botón que dice **_Download _**en la página de inicio (está junto al botón amarillo que dice **_Get Started_**).

![Sitio web de lenguaje Go](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipbsd8v393b24taro2cl.png)

Luego, simplemente elige la descarga que sea compatible con tu sistema, ya sea Windows, MacOS o Linux. Para Windows y MacOS, Go ya viene empaquetado en un instalador, por lo que solo necesitas abrirlo y seguir las instrucciones de instalación. Para Linux, necesitarás usar una terminal para extraerlo y agregar el ejecutable a la variable de entorno $PATH. Todas las instrucciones se pueden encontrar en la página de instrucciones del sitio.

Una vez instalado, puedes verificar si todo se instaló correctamente ejecutando el siguiente comando en cualquier terminal: go version. Si todo salió bien, verás un mensaje similar a este en la terminal: go version 1.20 linux/amd64, donde podrás ver la versión que instalaste, el sistema operativo y la arquitectura del procesador que utiliza tu sistema.

## Escribiendo nuestro primer programa: ¡Hola, Mundo!
Al igual que en otros lenguajes de programación, cuando aprendemos sobre Go, el primer programa que solemos escribir es el famoso "¡Hola, Mundo!" y vamos a mantener esa tradición, ya que recuerdo lo que un profesor mío de Java me dijo una vez:

Ahora, abramos el editor de código que prefieras. Puede ser cualquier editor con el que te sientas cómodo. Yo recomiendo Visual Studio Code con los complementos de Go y también IntelliJ Community con los complementos de Go. Ambos son excelentes y gratuitos.

Ahora, con el editor abierto, vamos a escribir el siguiente código:

```go
package main

import "fmt"

func main() {
    fmt.Println("¡Hola, Mundo!")
}
```

Guarda el archivo como hola.go, abre una terminal y navega hasta la carpeta donde se encuentra el archivo que acabamos de crear. En algunos sistemas, puedes hacer doble clic en cualquier lugar de la carpeta después de entrar en ella desde la terminal y buscar una opción que diga algo como "Abrir en la terminal", como ocurre en Windows, por ejemplo. Luego, ejecuta el archivo con el comando go run hola.go y verás el mensaje "¡Hola, Mundo!" en la terminal. ¡Felicitaciones! Acabas de escribir, compilar y ejecutar tu primer código en Go.

Entendiendo cómo funciona la estructura de un código Go
Ahora que hemos creado nuestro primer código en Go, vamos a entender cómo funciona la estructura del código. Para eso, ¡vamos a crear nuestro segundo código en Go! Simplemente copia el siguiente código en tu editor:

```go
package main

import (
	"fmt"
	"time"
)

func main() {
	var respuesta string
	edad := 45

	fmt.Println("Estoy validando tu edad, por favor espera un momento...")
	time.Sleep(5 * time.Second)
	respuesta = verificarEdad(edad)
	fmt.Println(respuesta)
}

func verificarEdad(edad int) string {
	if edad > 30 {
		return "¡Eres mayor!"
	}
	return "¡Aún eres joven!"
}
```

Guarda el archivo como verificar-edad.go. Ahora ve de nuevo a la terminal y ejecuta el comando go run verificar-edad.go. Verás que imprime la primera línea "Estoy validando tu edad, por favor espera un momento...", espera un momento y luego imprime una segunda línea, dejo que descubras cuál es.

Ahora explicaré qué hace cada parte del código. En la primera línea, tenemos package main, que indica en qué paquete estamos trabajando. Pero, ¿qué son los paquetes? Puede que te estés preguntando esto, pero de manera resumida (ya que hablaremos más sobre esto en otro artículo), los paquetes son las carpetas donde colocamos nuestros archivos Go. En el caso del paquete main, es especial porque contiene nuestra función también llamada main, que es el punto de entrada de nuestra aplicación. Esto significa que todo lo que escribamos deberá ser llamado de alguna forma desde la función principal. Pero no te preocupes por eso por ahora, ya veremos cómo hacerlo más adelante, ¿vale?

Ahora, pasemos a la siguiente parte del código, la sección de importaciones:

```go
import (
	"fmt"
	"time"
)
```

En esta sección, estamos importando todos los paquetes necesarios para nuestro programa. En este caso, estoy importando los paquetes estándar de Go: el paquete fmt y time, que nos permiten formatear la salida de texto en la terminal y trabajar con el tiempo, respectivamente. ¿Recuerdas que mencioné que Go viene con varios paquetes estándar? Bueno, los veremos con frecuencia, además de nuestros propios paquetes y paquetes de terceros, como los que traen frameworks para crear sitios web o APIs.

Ahora hablemos de las funciones en el código, las funciones main() y verificarEdad().

```go
func main() {
...
}

func verificarEdad(edad int) string {
...
}
```

Siempre que deseamos declarar una función, debe llevar la palabra clave func antes de su nombre. Pero es tan simple como eso, como en el caso de verificarEdad, que es una función que recibe un parámetro y devuelve una respuesta en forma de texto. ¿No te parece genial? Claro, esto es solo la punta del iceberg en cuanto a funciones. ¡Una explicación completa sobre funciones tomaría un artículo completo! Por lo tanto, para no complicarnos mucho en este momento y no extender demasiado, lo dejaremos aquí y seguiremos con la siguiente parte. También es interesante notar que para acceder a funciones de otros paquetes, como en el caso de fmt y time, debemos llamarlas utilizando la convención [paquete].[función], como por ejemplo, las llamadas a las funciones fmt.Println() y time.Sleep().

Ahora, hablemos de las variables respuesta y edad, que se declararon de manera diferente:

```go
var respuesta string
edad := 45
```

La variable respuesta simplemente se declaró, pero no se le asignó un valor, es decir, no le dimos un valor inicial, ni siquiera un texto, ya que es del tipo string. Si no sabes qué es un tipo string, no te preocupes, ¡lo explicaré en otro artículo dedicado a los tipos de datos en Go! En este caso, para la variable respuesta, el propio lenguaje Go se encargará de asignar un valor predeterminado, que en este caso es una cadena vacía. En cuanto a la variable edad, la declaré e inicialicé con el valor 45. Pero, ¿qué tipo es ese 45? Si te lo estás preguntando porque mencioné que Go tiene tipado, ahora te respondo: el lenguaje Go puede inferir que el tipo de 45 es un número entero, es decir, el tipo int del lenguaje. Tenemos otros tipos numéricos en el lenguaje, pero ya llegaremos a eso. Y la magia de declarar e inicializar una variable con valor se debe al operador :=. Recuerda un poco a la mascota de Go, ¿verdad?

Finalmente, dentro de la función verificarEdad() hay una estructura condicional, el famoso if.

```go
func verificarEdad(edad int) string {
	if edad > 30 {
	return "¡Eres mayor!"
	}
	return "¡Todavía eres joven!"
}
```

Aquí verificamos si un valor cumple con una validación específica. En este caso, verificamos si la edad es mayor que 30 y, si lo es, devolvemos una respuesta en forma de texto. Si la edad es menor o igual a 30, incluso si no lo mencioné explícitamente, se entiende implícitamente, la función devuelve otra respuesta. Puedes probarlo y poner una edad menor a 30, como 20, por ejemplo.

## Conclusión
En este artículo, dimos los primeros pasos con el lenguaje Go al crear nuestros dos primeros programas. Comenzamos a comprender cómo escribir código en Go, conocimos un poco de su historia y entendimos algunas de sus fortalezas. Continuaremos explorando el mundo de Go en otros artículos, así que si deseas seguir aprendiendo, puedes suscribirte al blog para recibir las próximas publicaciones en las que abordaremos más temas, como funciones, tipos de datos, estructuras de control, bucles, pruebas y más. Además, veremos cómo aplicar el principio SOLID en Go, cómo implementar patrones de diseño (los famosos Design Patterns) e incluso nos aventuraremos en prácticas de arquitectura.

¡Espero que este artículo te haya sido útil para comenzar a programar en Go! Si tienes sugerencias sobre temas que te gustaría ver relacionados con Go, desarrollo de software u otros temas, déjamelos en mis redes sociales y los compartiré con todos.

## Referencias
Donovan, A. A., & Kernighan, B. W. (2016). The Go Programming Language. Novatec Editora.
Sitio web de Go. Página oficial del lenguaje Go. Disponible en: https://go.dev/.
Sitio web de Roadmap Golang. Página específica del sitio Roadmap para el lenguaje Go. Disponible en: https://roadmap.sh/golang