¡Buenas!
Como muchos sabéis (o deberíais saber), Google ha diseñado y implementado un nuevo lenguaje de programación al que han llamado Go. En este análisis, todos los ejemplos han sido sacados de la página oficial del lenguaje: www.golang.org
Los señores de Google, la empresa que sabe más de nosotros que nosotros mismos, catalogan a Go como el lenguaje simple, rápido, seguro, concurrente, rápido y de código abierto. ¡Si le insistes un poco te hace cafés y todo! En fin, siendo testigo de tanto optimismo, ¿porque no opinar objetivamente y subjetivamente del lenguaje?
Comenzaré con un rodeo a la sintaxis, el porque usarlo y el porque NO usarlo desde mi punto de vista. Cabe destacar que cualquiera puede tener sus opiniones sobre el lenguaje, que son aceptadas aunque no las comparta.
Veamos, la sintaxis de Go es bastante innovadora, aunque basada en C tiene bastas diferencias. La primera que a la mayoría que hemos programado en C o C++ nos salta a la vista es la declaración de las variables.
Como podemos apreciar, ponemos
var al comienzo, luego el identificador y más tarde el tipo de la variable. ¿Porque tanto palabrerío inútil? Es la estoica y permanente batalla, estúpida en parte, de hacer los lenguajes de programación exactos a los lenguajes humanos. Lo más grave es que el tipo
puede ser omitido dejándole al compilador a imaginarse cualquier absurdez. Los que hemos programado en C sabemos que el tipo es importantísimo, porque un tipo mal elegido
puede hacer que gastemos hasta 8 veces más memoria de la necesaria. En Go dejamos que el compilador nos lo elija. Eso sí, menos mal que tiene tipos de tamaño fijo, como uint32 y int32 también, sino es para pegarles un tiro.
Otro error, más grave aún que cómo definir variables, ¡es que hay tipos complejos estándares! Hay un mapa estándar, hay hashes, incluso string. ¿Que problema hay? Diréis... Uno, muy, grave... Si hay un error en la definición del mapa, y esto hace que haya un agujero de seguridad,
todos los programas hechos con ese compilador
estarán afectados por la errata del equipo de Google. Algo que no me gusta de C++, pero es útil, es su librería estándar que permite la redefinición de las clases, así cualquiera puede implementarlas a su gusto. Aprende, Google.
En fin, no todo serán malas noticias para los de Mountain View, algo que si me ha gustado son las interfaces, algo que ya hemos visto en PHP. Son la simpleza del polimorfismo. Básicamente, crea declaraciones sin necesidad de definirlas, para que luego, cada objeto que las herede, las defina a su manera. No es nada nuevo ya que
C++ puede simularlo con las clases virtuales puras.
Algo que me ha parecido bastante inútil, ya que nadie fallece por poner paréntesis, es cómo trabaja con la precedencia de operadores. Cuánto más espacio entre operador y operando, menor prioridad tiene. Así que estás obligado a programar como ellos quieren. Por ejemplo:
En este caso,
<< tiene más preferencia que
+. Los que programan sin espacios entre operadores se joden literalmente. Adios al formateo personal y cómodo de cada uno.
Otro error
GRAVE es el de los paquetes (packages), comunmente tratados cómo nombres de espacio para los programadores de C++. Esto es ofensivo... ¡¡Un miembro de un paquete es sólo accesible cuándo comienza por una letra mayúscula!! Así que tendremos que programar como montañas, olvidaos del estilo de toda la vida.
Más errores sumamente perjudiciales para la salud es el de los punto y comas. En Go, se ponen puntos y comas para finalizar sentencia, como en C, C++, C#, Java y lenguajes parecidos. Bien, pues NO son obligatorios. Que bien, ¿verdad? ¡No! Porque el compilador se dedica a ponerlos donde cree conveniente, y hay que usar un formato impuesto. Por ejemplo:
Está bien, pero:
No, porque el compilador confunde f() con una sentencia y pone
;, por lo que dará resultados imprevistos.
El
switch de Go es mejor que el de C, ya que permite comparaciones más complejas, esto es correcto, algo que personalmente me ha gustado mucho:
Algo que no me ha gustado, ya que no encuentro útil, pero que a los programadores de muy alto nivel les gustará, es que
las funciones pueden devolver múltiples valores. Así pues, esto es correcto:
Y bueno, por hoy he acabado, mañana seguiré analizando más este lenguaje, aquí tenéis un ejemplo sacado de la página de Go. Un servidor Web: http://golang.org/doc/effective_go.html#web_server
Saludines