El lenguaje de programación GO [Golang] (Parte 1: Introducción)

En próximos post vamos a realizar una introducción práctica y detallada al lenguaje Go, también conocido como Golang.

En esta primera parte vamos a explicar que es y para que se utiliza, empezaremos con la práctica en siguientes “fascículos” donde aprenderemos a instalarlo y a utilizarlo.

Go es un lenguaje de programación concurrente y compilado inspirado en la sintaxis de C que ha sido desarrollado por Google. Actualmente está disponible en formato binario para los sistemas operativos Windows, GNU/Linux, FreeBSD y Mac OS X, pudiendo también ser instalado en estos y en otros sistemas con el código fuente.

Go es un lenguaje de programación compilado, concurrente, imperativo, estructurado, orientado a objetos —de una manera bastante especial— y con recolector de basura que de momento está soportado en diferentes tipos de sistemas UNIX, incluidos Linux, FreeBSD y Mac OS X. También está disponible en Plan 9 puesto que parte del compilador está basado en un trabajo previo sobre el sistema operativo Inferno. Las arquitecturas soportadas son i386, amd64 y ARM.

Durante muchos años, los desarrolladores han tenido que elegir entre lenguajes de programación de tipado estático compilados, por regla general, bastante complejos pero que proveen grandes características relacionadas con la optimización y el rendimiento y lenguajes de tipado dinámico interpretados con características de mucho más alto nivel que hacían su aprendizaje, uso y sintaxis más sencilla y por tanto divertido programar en ellos, eso si, sacrificando rendimiento y control.

Go mezcla lo mejor de ambos mundos y nos aporta una sintaxis sencilla, clara y divertida junto a la potencia que nos ofrece un lenguaje fuertemente tipado y compilado incorporando además características de alto nivel que facilitan el uso del lenguaje por los desarrolladores.

Un hola mundo en GO es muy parecido al hola mundo en C++

package main

import "fmt"

func main() {
  fmt.Printf("Hola, mundo.\n")
}

Puedes probar este código en compilador online: https://play.golang.org/

Pero hay algunas diferencias claras con C:

Declaraciones al revés:

En Go las declaraciones se realizan al revés desde la perspectiva de C (o C++ o Java). La idea principal en C es que se declara una variable como una expresión que denota su tipo. Según los creadores, aunque la idea detrás de la declaración de tipos en C es buena, los tipos y las expresiones gramaticales no se mezclan demasiado bien y el resultado puede ser confuso. Go sin embargo, separa la expresión y la sintaxis de tipo lo cual simplifica las cosas (el prefijo * para los punteros es la excepción que confirma la regla).

Una declaración típica en C sería, declararía que i es un puntero pero no j:

int* i, j;

En Go, Se declaran las dos variables como punteros, es más claro y natural:

var i, j *int

Punto y coma

En Go el uso del carácter punto y coma “;“ al final de una instrucción es opcional…

Aritmética de Punteros

Go no tiene aritmética de punteros, según los creadores, la razón es la seguridad. Sin aritmética de punteros es posible crear un lenguaje en el que no se puede obtener una dirección ilegal que sea usada de forma incorrecta. La falta de aritmética de punteros simplifica la implementación del recolector de basura. Además, optimizando el compilador y con el hardware actual, un bucle que utiliza los índices de un array puede ser tan eficaz como un bucle que utiliza aritmética de punteros.

Uso de ++ y —

En Go, el uso de ++ y — para incrementar y decrementar el valor de una variable es una sentencia y no una expresión. Además, solo puede utilizarse en su versión sufija pues según los autores, la versión prefija pierde todo su sentido en la ausencia de aritmética de punteros.

Cosas que molan:

  • Es divertido crear piezas de software en Go.
  • Se siente como un lenguaje dinámico al mejor estilo Python.
  • Posee inferencia de tipos.
  • Sin embargo es fuertemente tipado.
  • Sintaxis similar a C.
  • Perfomance cercana a C.
  • Compilación extremadamente rápida.
  • Muy bajo uso de memoria.
  • Garbage Collector.
  • Alta concurrencia. Asincrónico.
  • Multi-Core
  • Excelentes herramientas “out of the box” para testing, análisis de perfomance, análisis de memoria, code coverage, etc.
  • Herramientas para Unix.
  • Excelentes librerías.
  • Web Server autocontenido y muy performante.
  • Permite compilar para Android y iOS.

Sitio Web de Go: https://golang.org/

Recursos de programacion en Go: http://go-lang.cat-v.org/

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada.