No te pierdas este crédito gratuito de 200 USD (Válido durante 60 días) en DO, lanza tu proyecto ahora

Utiliza este crédito gratuito para lanzar tus proyectos ahora en Digital Ocean, eres libre de gastarlo cuando quieras en los siguientes 60 días.

Índice del contenido

Go lenguaje de programación introducción a variables y tipos de datos

Go lenguaje de programación introducción a variables y tipos de datos

Go, también conocido como Golang, es un lenguaje de programación compilado desarrollado por Google con el propósito de ser simple, sencillo de aprender, suficientemente rápido y centrado fuertemente en la concurrencia.

¡Hola! ¿Ya sabes que tengo un tutorial completo del lenguaje de programación Go completamente gratis?, puedes encontrarlo directamente en la barra del menú superior o haciendo clic en este panel

¿Qué es Go? Un poco sobre el lenguaje de programación

Go, también llamado Golang, es un lenguaje de programación con una sintaxis muy parecida a la de C y con ciertas abstracciones en su sintaxis que lo vuelven un lenguaje en el que escribir código es muy sencillo, la verdad es que la sensación es de una mezcla entre C y Python.

El diseño de Go como lenguaje de programación está basado en un documento llamado: Everything you’ve wanted to know about programming languages but have been afraid to ask escrito por Tony Hoare (El creador del argumento quicksort). En el que se enfatiza la importancia de aspectos tales como:

  • Elegancia y simplicidad
  • Buenas abstracciones que oculten los detalles de implementación
  • Código predecible
  • Manejo de errores simple
  • Compilación extremadamente rápida

Estamos ante un lenguaje compilado, imperativo, fuertemente centrado en la concurrencia y con tipado estático.

Si de verdad te interesa el tema, encontré este video que resume bastante bien la historia y la filosofía que existe detrás de Go y te lo comparto:

Aspectos geniales o ventajas del lenguaje Go

  • El lenguaje es bastante simple Es un lenguaje con muy pocas palabras clave y pocas funcionalidades. Puedes aprenderlo en muy poco tiempo.
  • El compilador de Go es super rápido Dado que tiene pocas palabras claves y el lenguaje es bastante simple, go compila rapidísimo comparado con otros lenguajes de programación.
  • El manejo de concurrencia es sencillo Go fue diseñado como un lenguaje concurrente, crear concurrencia con las goroutines es bastante sencillo
  • Crear aplicaciones web es bastante sencillo Go incorpora en su librería estandar muchísimas utilidades para crear servidores web, por lo que incluso puedes usarlo sin usar ningún framework, para aplicaciones sencillas, y no tendrás ningún problema. Definitivamente un lenguaje to get shit done

Mal diseño y desventajas del lenguaje Go

Para hacer este análisis lo más objetivo posible, a continuación, te explico algunos aspectos controversiales de go que no son vistos con buenos ojos por algunos desarrolladores.

Manejo de errores con Go con if
Este patrón es bastante recurrente en las aplicaciones y llega a ser tedioso

  • Go carece de soporte para clases de manera directa. Pero no todo está perdido, porque sí cuenta con ciertas características que lo dotan de funcionalidades de la POO, tales como polimorfismo y clases, por medio de interfaces, structs y embedded values .
  • Go no cuenta con manejo de excepciones con bloques try y catch o equivalentes. Sino que los errores deben devolverse como valor de retorno en una función y se manejan comprobando que esta no sea nula (nil), por medio de bloques if. Lo anterior puede volverse bastante verboso y repetitivo.

Manejo de errores recurrente y repetitivo en Go
If err!= nil en todos lados, el manejo de errores en Go debería ser mejor

  • No existen argumentos por defecto en go, lo que aumenta la cantidad de código a escribir para lidiar con valores predeterminados.
  • No cuenta con manejo manual de memoria, go usa un garbage collector, lo cual simplifica el manejo de memoria enormemente, pero limita la administración más granular de memoria, esta fue una de las razones por las cuales discord migró de Go a Rust.
  • Go no cuenta con generics Go ya cuenta con soporte para generics desde su version 1.18.

Buenas prácticas de código en el lenguaje Go

Go está fuertemente orientado a las buenas prácticas de código. ¿Cómo lo hace? El compilador fuerza buenas prácticas en el código, impidiendo que el código compile si hay variables o importaciones que no se usan, o si no se respetan las reglas de la privacidad de nuestras propiedades y funciones, entre otras.

Error de compilación en go por variables sin usar
La compilación no se permite si hay variables sin usar.

Sin embargo no te obliga a revisar punteros hacia nil, volviéndo estos los errores más difíciles de debuggear.

Go tiene la mejor mascota: Gopher

La mascota oficial es una ardilla de tierra y es muy común entre la comunidad usarla para ilustrar el contenido relacionado con go. Este Sartre en versión roedor azul es tan popular entre los desarrolladores que existen herramientas, como Gopherizme , para crear avatares personalizados. El impacto de la mascota es tal, que muchos desarrolladores la usan a manera de logo, aunque el logo oficial de go ya ha sido definido.

Mascota y logo de go
A la izquierda la mascota de Go. A la derecha el logo oficial

Instalación de Go

Go se encuentra en la mayoría de los repositorios de las distribuciones de GNU/Linux. En debian y ubuntu se instala usando el comando apt install como cualquier otro paquete.

sudo apt install golang

Las instrucciones de instalación para Freebsd, windows y macosx serán diferentes.

Estructura de un archivo de go

Los archivos de go se estructuran de la siguiente manera y en este orden:

Nombre del paquete

Una sección donde se declara el nombre del paquete después de la palabra package. El nombre del paquete nos servirá para hacer importaciones de nuestros modulos.

package main

Importaciones

Una sección donde se importan todos los paquetes de go que se usarán. Para ello usamos la palabra import.

import “fmt”

Múltiples importaciones pueden colocarse dentro de paréntesis, sin comas.

import (
    "strconv"
    "fmt"
)

Contenido

El contenido del archivo, es decir declaraciones de variables, types, funciones , constantes, etc.

func main() {
    fmt.Println("Hello world!")
}

El paquete main

Go requiere de un paquete principal llamado main, que se especificará colocando package main al principio de nuestro código fuente.

package main

La función main

La función main es el punto de partida de un archivo de go, como lo sería en C, y no retorna nada.

package main

import "fmt"

func main() {
    fmt.Println("Ejecutando el programa")
}

Función init en Go

Antes del punto de entrada del programa (la función main) se ejecuta una función init, esta puede contener todas las inicializaciones necesarias para la ejecución del programa.

package main

import "fmt"

func init() {
    fmt.Println("Inicializando el programa principal")
}

func main() {
    fmt.Println("Ejecutando el programa")
}

Como compilar y ejecutar un archivo de go

Dado que go es un lenguaje compilado, requiere la compilación del código antes de poder ejecutar el código. El compilado se realiza con el comando build.

go build src/main.go

Tras el compilado tendremos un archivo que podremos ejecutar.

./main

También es posible compilar y correr el código en un solo paso usando run en lugar de go.

go run src/main.go

Diferencias entre run y build en el lenguaje Go

La diferencia entre build y run radica en que run compila el código y lo ejecuta desde un directorio temporal, y posteriormente limpia los archivos generados. Si agregamos el flag –work, podremos ver la ubicación de este directorio.

go run --work src/main.go
# WORK=/tmp/go-build983014220

Tipos primitivos de datos en Go

Dado que estamos tratando con un lenguaje compilado, necesitamos decirle al compilador el tipo de dato que usaremos para cada variable o constante.

Los valores primitivos de Go son los siguientes.

Entero

Para valores enteros con o sin signo.

  • int, se asigna de acuerdo al SO (32 o 64 bits)
  • int8,
  • int16
  • int32
  • int64

Entero sin signo

Para valores sin signo, es decir, positivos.

  • uint, se asigna de acuerdo al SO (32 o 64 bits)
  • uint8
  • uint16
  • uint32
  • uint64

Decimal

Para números decimales

  • float32
  • float64

Textos

Para textos existe únicamente string

Boolean

Para valores true or false

Números complejos

Permite manejar números reales e imaginarios:

  • Complex64
  • Complex128

Por ejemplo: c:=100+2i

Variables, constantes y zero values en el lenguaje Go

Variables

Go permite definir variables especificando el tipo de dato y la keyword var. Es como si a una declaración de variable de Javascript le agregaras el tipo de dato.

var gravedad int8

La asignación de variables puede realizarse en un solo paso de la siguiente manera:

var gravedad int = 123

También es posible dejar que el compilador intuya el tipo de dato con el operador walrus (marmota). Este tipo de asignación solo es posible dentro del scope de una función.

gravedad := 123

En go no puedes asignar una variable al valor nulo; nil.

var gravedad = nil // error

Constantes

Con las constantes funciona de manera similar, pero se caracterizan porque no pueden modificarse. Se usa la keyword const.

Es necesario asignar un valor a una constante al momento de declararla.

const gravedad int8 = 123

Si no especificamos un tipo de constante el compilador intentará intuirlo.

const pi = 3.14159

Zero values

En go, si no asignamos un valor el compilador usará valores predeterminados para cada tipo de dato.

  • int: 0
  • float: 0
  • string: "
  • bool: false

Valor nulo

Go usa la palabra reservada nil para referirse a un valor nulo.

Comentarios

Los comentarios se marcan usando dos diagonales seguidas

// Este es un comentario en go

Los comentarios multilinea se realizan con una diagonal seguida de asterisco

/*
Este es un comentario multilinea
*/

Operadores en go

Los operadores de go son similares al resto de los lenguajes.

  • +, suma
  • -, resta
  • *, multiplicación
  • /, división
  • <, menor que
  • <=, menor o igual que
  • >, mayor que
  • >=, mayor o igual que
  • %, el módulo o residuo
  • !=, inequivalencia
  • ==, igualdad
  • !, negación
  • &&, operador AND
  • ||, operador OR
  • ++, incremental
  • --, decremental

Con esto termino la parte más básica del lenguaje Go. Espero que tengas una visión más completa del lenguaje, tanto de las partes buenas como de las partes malas. Y si quieres aprender lo básico puedes leer las siguientes entradas, tengo tutoriales básicamente de todas las partes básicas de Go.

Eduardo Zepeda
Desarrollador web, entusiasta de los sistemas GNU/Linux y el Software Libre. Py, Ts y Go, pero abierto a otras opciones como el Rustaceanismo. Creo en las bondades de las criptodivisas más allá de la especulación monetaria.
Leer más