Go (lenguaje de programación)

(Redirigido desde «Go (Programming Language)»)
Go
Información sobre la plantilla
Parte de la familia compilado concurrente, imperativo, estructurado
[[Archivo:
200px Lenguajes de programación.
|260px]]
CreadorRobert Griesemer, Rob Pike y Ken Thompson
DesarrolladorGoogle
Diseñado porRobert Griesemer, Rob Pike y Ken Thompson
LicenciaBSD
Sitio web
http://golang.org/

El Lenguaje de Programación Go es para sistemas lanzado por Google en noviembre del 2009 cuyo desarrollo comenzó en septiembre del 2007 por Robert Griesemer, Rob Pike y Ken Thompson. Es un lenguaje de programación compilado, concurrente, imperativo, estructurado, no orientado a objetos —de una manera bastante especial— y con recolector de basura, soportado en diferentes tipos de sistemas.

Características

GO proviene de la fusión de varios lenguajes de familias de donde desciende, entre ellos el lenguaje C. Aún así incorpora elementos de Python (recordemos que es lenguaje preferido de Google, además que el creador de este lenguaje, trabaja también allí), así como de la familia de Pascal/Modula/Oberon entre otros programas dinámicos. Google no solamente pretende el diseñar un lenguaje de programación que sea bastante eficiente, sino que este lenguaje sea usado masivamente por miles de desarrolladores en la creación de aplicaciones web y de software a nivel mundial Este proyecto combina el rendimiento y las prestaciones de seguridad propios de un lenguaje compilado como C++ con la velocidad de un lenguaje dinámico como Python.

El proyecto Go, concebido inicialmente para poder escribir de forma optimizada el software que Google utiliza internamente, está siendo desarrollado, entre otras razones, para dar respuesta a las necesidades de programadores que se posicionan contra la complejidad de sistemas como Java y C++.

La sintaxis del lenguaje de programación Go es muy parecida a la de C y es de código abierto.

Concurrente

Es un lenguaje concurrente que soporta canales de comunicación basados en el lenguaje CSP de Sir Charles Antony Richard Hoare. La concurrencia en Go es diferente a los criterios de programación basados en bloqueos como pthreads.

Recolector de basura

Go implementa un recolector de basura como la mayoría de los lenguajes modernos.

Simplicidad

Los lenguajes más utilizados como C++, Java o C# son más pesados y voluminosos. La sencillez es la característica principal de Go, su sintaxis es clara y concisa. Mientras que C es tristemente célebre por la complejidad de la sintaxis de sus declaraciones, Go utiliza inferencia implícita de tipos pudiéndose de esta manera evitar la declaración explícita de variables. La declaración de variables es simple y conveniente, y difiere de la de C. ====Tipificación dinámica====Go admite la tipificación dinámica de datos también conocida como duck Typing presente en multitud de lenguajes dinámicos como por ejemplo JavaScript, Ruby o Python. Un struct puede implementar una interfaz de forma automática, lo cual es una característica potente y novedosa.

Goroutines

No son ni threads, ni co-rutinas ni procesos. La comunicación entre goroutines se realiza a través de una característica del lenguaje llamada canales —basada en CSP—, que es mcho más seguro y fácil de usar que los sistemas predominantes basados en bloqueos de pthreads o características modernas de Java

Innovación

Durante muchos años, los desarrolladores hemos 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. ==Diferencias principales con C==Go difiere mucho con C, aunque su sintaxis es similar.

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: int* i, j;

Declara que i es un puntero, pero no j. En Go: var i, j *int

Se declaran las dos variables como punteros. Es más claro y natural.

Semicolon

En Go el uso de semicolon “;“ 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.

++ y —

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

¿Será Go un lenguaje orientado a objetos?

Bueno, esta no es una pregunta fácil de responder. Digamos que si y no. Go tiene tipos y métodos y permite un estilo de programación orientado a objetos pero no existe una jerarquía de objetos, por lo tanto, no existe la herencia. En Go, el concepto de “interfaz“ diferente que los creadores creen es fácil de usar y en muchos sentidos es más general. También existen formas de embeber tipos dentro de otros tipos para obtener algo análogo a las subclases. Los métodos de Go son más generales que los de C++ o Java, pueden ser definidos para cualquier tipo de datos no solo para los structs. La ausencia de jerarquía de tipos en Go, hace que los “objetos“ den una sensación de ser más ligeros que en lenguajes como C++ o Java.

Hola Mundo

Un ejemplo sencillo a la hora de escribir código en Go, el conocido Hola Mundo.

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

Todos los archivos Go deben declarar el paquete al que pertenecen a través de una sentencia package. También pueden importar módulos y funciones externas de otros paquetes, en este caso usamos las funciones del paquete “fmt“ que nos da acceso a la función Printf. Todos los archivos en Go son UTF-8. Para compilar el código anterior usaríamos el compilador Gc o el back-end de gcc.

Conclusión

En esta introducción al lenguaje de programación Go se han visto las características básicas del nuevo lenguaje de programación de Google y sus diferencias más remarcables con otros lenguajes compilados.

Fuentes