GoLang, nuevo modelo de programación

GoLang logo

GoLang logo

Translate to:English

Estos días he estado mirando la sintaxis (y semántica) de programación de GoLang.

Desarrollo siempre que puedo en C. Pero recurro a Python cuando tengo que hacer alguna GUI (PyQt4) o desarrollo web (Django).

Con GoLang se abre (a priori) una opción que llevaba tiempo buscando: “código nativo con la flexibilidad de Python“.

Mis objetivos se verán cumplidos si la relación tiempo de ejecución/tiempo de desarrollo sale más favorable que respecto a Python. El tiempo lo dirá.

Ahora mismo necesito cambiar el chip para este nuevo lenguaje.

Voy a resumir (desde mi punto de vista, claro) las principales claves del nuevo modelo de programación que GoLang presenta:

  • Inicialización de las variables: ¿cuántas veces no habeis tenido un segmentation fault por variables no inicializadas? Es sin duda una característica que echaba de menos.
  • Switch de cualquier tipo: poder hacer switch sobre strings es una característica muy necesitada por mi, tuve que recurrir a macros para poder emularla.
  • Defer: esta nueva keyword es muy interesante. En la mayoría de funciones relacionadas con I/O, es posible que no se cumpla una condición y por ejemplo tengamos que cerrar un archivo y salir. Si la cóndición se cumple, al final de la operación es necesario cerrar dicho archivo. Actualmente yo usaba un if para comprobar la condición a falso, cerrar el fichero en el cuerpo del if, y retornar. En casos más complidados usaba el peligroso goto. Pues bien, con “defer fclose(fd)” justo despúes del fopen(), conseguimos que justo antes de retornar la función, se cierre el fichero. Es decir, defer, encola llamadas a función en una cola LIFO a ejecutar una vez terminada la ejecución de la función. Creo que esto es muy útil y genera un código muy limpio.
  • Campos vectoriales o funciones con retorno múltiple: desde el punto de vista algebraico, las funciones de C son campos escalares, y = f(x1,x2,…,xn), en GoLang podemos devolver más de un valor. Ésto es tremendamente útil y ayuda que los programas sean más limpos. Hasta ahora lo habitual era devolver un código de retorno (Success o el nº de error) y pasar el puntero de la variable a devolver. Ej: En C, int getData(FILE* fd, char** data,int* len), con GoLang:  func getData(fd *FILE) (data *char,len int)
  • (Casi) Adiós al “;”: con GoLang no es necesario el uso del “;” en los bloques top level. La verdad es que no acabo de entender muy bien donde es necesario o no. En los códigos de ejemplo he encontrado sitios donde hay “;” y no es necesario. Eliminándolo el programa sigue compilando. Creo que se colará más de un “;” innecesario.
  • Literales ideales: las constantes y demás literales tienen un tamaño de ¡1024 bits! Podemos tener el número Pi con una gran precisión. Luego su manejo dependerá del tipo de variable donde lo almacenemos.
  • El tipo “map” (diccionario): el diccionario es unos de mis tipos preferidos en Python. Ahora lo puedo usar en GoLang🙂.
  • Los threads con Go: adiós al uso de la libreria pthread para crear hilos. Crear un hilo en GoLang es tan sencillo como ” go <funcion>”. Simplemente impresionante.
  • Sincronización y comunicación con CSP: Según mi profesor de programación concurrente, Dijkstra sólo consideraba como sincronización segura de threads la que estaba hecha mediante canales. GoLang implementa la semántica de programación CSP por canales. Esta característica dará mucho que hablar (y escribir).
  • Declaración implicita: ya no es necesario declarar la variable. Con “:=” creamos una variable con el tipo más acertado para el literal que usamos. Ej; ” i := 1″.
  • Test unitarios: los test de unidad son un latazo. GoLang incorpora en su framework soporte para realizar estos test. Sin duda ganaremos tiempo para otras cosas.

Creo que estas son las principales características de GoLang que harán cambiar la forma de programar a más de uno.

Por último os quiero comentar unos detalles sobre GoLang que me llaman la atención.

  • Ahora mismo hay soporte para i586, amd64 y ARM. ¿Por qué ARM? Creo que Google pretende recompilar las aplicaciones o el propio Android con GoLang.
  • ¿Qué pasa con Windows? Ahora mismo no podemos crear código que corra en Windows. Los desarrolladores de GoLang dicen que por ahora no va a ver soporte para Windows. Creo que soportar o no Windows será decisivo en el futuro de este nuevo lenguaje.

Bueno, ahora toca empezar a programar con GoLang🙂

Entradas relacionadas:

GoLang no es para Windows
Benchmark a GoLang: servidor web en Go vs Python

Translate to:English
MenefanteMenéame TwitterTwitter

6 Responses to GoLang, nuevo modelo de programación

  1. Pingback: GoLang, nuevo modelo de programación

  2. razormad dice:

    Muy buen post. Tendremos que ponernos a “cacharrear” un poco.🙂

    • @razormad, gracias. Próximamente voy a escribir un howto para portar librerías a GoLang.

  3. Pingback: idea4ideas4all, ¿dónde esta el API? « RoblesHermoso – TechnoBot

  4. Pingback: ideone.com: Programa, compila y ejecuta in the cloud | Warez-Nigga

  5. Pingback: servicenow.zendesk.com

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: