lunes, 10 de marzo de 2014

Construyendo aplicaciones web con Golang: entorno de desarrollo (parte 1)

Configuración del entorno de desarrollo en Go

Bienvenido al mundo de Go, vamos a comenzar a explorarlo!
Go tiene una compilación muy rápida, recolector de basura, y el lenguaje tiene un sistema orientado a la concurrencia. Esto tiene las siguiente ventajas:
  • Compila grandes proyectos en solo unos pocos segundos.
  • Nos provee un modelo de desarrollo de software sobre el cual es sencillo razonar, evitando la mayor parte de los problemas causados por los archivos de cabecera del estilo de C.
  • Es un lenguaje estático que no tiene niveles en su sistema de tipos, por lo cual los usuarios no deberán pasar demasiado tiempo estudiando las relaciones entre tipos. Es mas un lenguaje orientado a objetos livianos.
  • Realiza la recolección de basura. Proporciona un soporte básico para la concurrencia y la comunicación.
  • Esta diseñado para equipos de mas de un núcleo.
Go es un lenguaje compilado. Combina la eficiencia de los lenguajes interpretados o dinámicos con la seguridad de los lenguajes estáticos. Va a ser el lenguaje de elección para las computadoras de varios núcleos conectadas a la red. Por estos motivos, hay algunos problemas que tienen que resolver el propio lenguaje, como un rico sistema expresivo ligero de tipos, concurrencia y la recolección de basura estrictamente regulada. Desde hace algún tiempo, no han salido paquetes o herramientas que resuelvan estos problemas de manera pragmática, por esto nació la motivación para el lenguaje Go.
En este capitulo, te voy a mostrar como realizar la instalación y configuración tu entorno de desarrollo Go.

Instalación

Tres formas de instalar Go

Hay varias formas de configurar el entorno de desarrollo Go en nuestro equipo, usted puede elegir el que mas le guste. Estas son las tres formas más comunes.
  • Instalación del paquete oficial.
    • El equipo de Go nos ofrece paquetes para una instalación cómoda en Windows, Mac, Linux y otros sistemas operativos. Esta es la forma más sencilla de empezar.
  • Instalarlo desde el código fuente.
    • Esta forma es popular para los desarrolladores que están familiarizado con sistemas operativos Unix-like.
  • Usar herramientas de terceros.
    • Hay muchas herramientas de terceros y manejadores de paquetes para instalar Go, como apt-get en Ubuntu y homebrew para Mac.
En caso de desear instalar más de una versión de Go en su computadora, debería mirar la herramienta llamada GVM. Es la mejor herramienta que eh visto hasta ahora para lograr este trabajo, de lo contrario deberá saber como hacer frente a este problema por su cuenta.

Instalar desde el código fuente

Debido a que algunas partes de Go están escritas en Plan 9 C y en ensamblador AT&T, hay que instalar un compilador C antes de tomar el siguiente paso.
En una Mac, una vez instalado Xcode, usted ya tendrá el compilador instalado.
En sistemas Unix-like, usted necesita instalar gcc o un compilador similar. Por ejemplo, utilizando el manejador de paquetes apt-get incluido en Ubuntu, uno puede instalar todos los requerimientos del compilador con lo siguiente: sudo apt-get install gcc libc6-dev
En Windows, necesita instalar MinGW con el fin de instalar gcc. No se olvide de configurar las variables de entorno después de que allá finalizado la instalación.
El equipo de Go utiliza Mercurial para manejar el código fuente, entonces usted deberá instalar esta herramienta para poder descargar el código fuente.
En este punto ya podrá ejecutar los siguientes comando para clonar el código fuente de Go, y comenzar a compilar.( Esto va a clonar el código fuente en el directorio actual, así que antes cambie a su directorio de trabajo. Esto puede tomar algún tiempo. )
hg clone -u release https://code.google.com/p/go
cd go/src
./all.bash 
Una instalación correcta terminara con el mensajes "ALL TESTS PASSED."
En Windows, se puede lograr lo mismo ejecutando el archivo all.bat.
Si usted esta usando Windows, el paquete de instalación va a configurar las variables de entorno automáticamente. En cambio en los sistemas Unix-like, usted necesita configurar estas siguientes variables de forma manual.(Si su versión de Go es mayor a la 1.0, no va a necesitar configurar $GOBIN, y automáticamente se va a relacionar con su $GOROOT/bin, del que vamos a hablar en la siguiente sección)
export GOROOT=$HOME/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOROOT/bin
Si usted ve la siguiente información en la pantalla, usted a configurado todo.

Figura 1.1 Información después de la instalación desde el código fuente
Una vez que vea la información para el uso de Go, esto significa que ha instalado Go de forma exitosa en su equipo. Si dice "no such command", verifique que su variable de entorno $PATH contenga la ruta de instalación de Go.

Utilice los paquetes de instalación estándar

Go tiene paquetes de instalación de un solo clic para todos los sistemas operativos. Estos paquetes van a instalar Go en /usr/local/go (c:\Go en Windows) de forma predeterminada. Por supuesto que uno puede cambiarlo, pero en ese caso deberá modificar todas las variables de entorno de forma manual, como se mostró anteriormente.

Como comprobar si tu sistema operativo es de 32-bit o 64-bit?

Nuestros siguientes pasos depende de nuestro tipo de sistema operativo, así que debemos verificarlo antes de descargar los paquetes de instalación estándar.
Si esta utilizando Windows, presione Win+R y luego ejecute la herramienta de comandos, tipeando el comando systeminfo y eso nos va a mostrar alguna información bastante útil solo por unos segundos. Busque la linea con "system type", si usted ve "x64-based PC" eso significa que su sistema operativo es de 64-bit, en caso contrario será de 32-bit.
Recomiendo fuertemente la descarga de la versión del paquete de 64 bits si sos un usuario de Mac, porque Go ya no es compatible con los procesadores de 32 bits puros de MacOs
Los usuarios de Linux pueden tipear en la terminal el comando uname -a para ver la información del sistema. Las versiones de 64 bits se muestran de la siguiente manera.
<alguna descripción> x86_64 x86_64 x86_64 GNU/Linux
// Algunas maquinas por ejemplo como Ubuntu 10.04 muestran lo siguiente
x86_64 GNU/Linux
Las versiones de sistemas de 32-bit muestran lo siguiente.
<alguna descripción> i686 i686 i386 GNU/Linux

Mac

Vaya a la pagina de descarga, elija go1.0.3.darwin-386.pkg para sistemas de 32-bit o go1.0.3.darwin-amd64.pkg para sistemas de 64-bit. Vaya durante todo el camino presionando "next" o "siguiente", ~/go/bin va a ser añadido al $PATH después de finalizada la instalación. Ahora abra una terminal y escriba go. Usted debería ver lo que se muestra en la figura 1.1.

Linux

Vaya a la [página de descarga]((http://code.google.com/p/go/downloads/list), elija go1.0.3.linux-386.tar.gz para sistemas de 32-bit o go1.0.3.linux-amd64.tar.gz para sistemas de 64-bit. Supongamos que desea instalar Go en la ruta $GO_INSTALL_DIR, descomprima tar.gz en esa ruta con el comando tar zxvf go1.0.3.linux-amd64.tar.gz -C $GO_INSTALL_DIR. Entonces configure su $PATH export PATH=$PATH:$GO_INSTALL_DIR/go/bin. Ahora abra una terminal y ejecute go. Usted debería ver lo que se muestra en la figura 1.1.

Windows

Vaya a la [página de descarga]((http://code.google.com/p/go/downloads/list), elija go1.0.3.windows-386.msi para sistemas de 32-bit o go1.0.3.windows-amd64.msi para sistemas de 64-bit. Siga el proceso presionando "next" o "siguiente", esto va a añadir c:/go/bin a su path. Ahora abra una linea de comandos de Windows y ejecute el comando go. Usted debería ver lo que se muestra en la figura 1.1.

Utilizar herramientas de terceros

GVM

GVM es una herramienta para el control de versiones de Go desarrollada por terceros, como rvm en ruby. Es bastante sencilla de utilizar. Instale gvm escribiendo el siguiente comandos en su terminal.
bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer)
Luego podemos instalar Go con el siguiente comando.
gvm install go1.0.3
gvm use go1.0.3
Después de que el proceso termine, ya estará todo listo y configurado.

apt-get

Ubuntu es la versión de Linux para escritorio mas popular. Este utiliza el administrador de paquetes apt-get. Nosotros podemos instalar Go utilizando los siguientes comandos.
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang-stable

Homebrew

Homebrew es un programa para la gestión de herramientas utilizando comúnmente en Mac para manejar nuestro software. Solo tienes que tipear el siguiente comando para instalar Go.
brew install go
 

$GOPATH y nuestro entorno de trabajo

$GOPATH

Todos los comando en Go confían en una importante variable de entorno llamada $GOPATH. Note que esta no es la variable $GOROOT que es donde Go es instalado. Esta variable indica cual es el área de trabajo de Go en nuestra computadora. (Yo utilizo este path en mi computadora, si usted no tiene la misma estructura de directorio, por favor sustitúyala por la de usted.)
En sistemas Unix-like, la variable debería ser utilizada de forma similar a esta.
export GOPATH=/home/apple/mygo
En Windows, es necesario crear una nueva variable de entorno llamada GOPATH, entonces podemos configurar un valor como c:\mygo( Este valor va a depender donde queremos localizar nuestro espacio de trabajo )
Se puede tener mas de una ruta (espacio de trabajo) en $GOPATH, pero recuerde que necesita utilizar :(; en Windows) para romper con ellas. En este punto, go get va a salvar el contenido en su primera ruta en el $GOPATH.
En $GOPATH, usted debería tener tres carpetas, de la siguiente manera.
  • src para el código fuente con la extensiones .go, .c, .g, .s.
  • pkg para los archivos compilados de extensión .a.
  • bin para los archivos ejecutables
En este libro, utilizo mygo como mi única ruta en el $GOPATH.

Carpeta para los paquetes

Crear un paquete con archivos de código fuente y capetas como $GOPATH/src/mymath/sqrt.go (mymath es el nombre del paquete) ( El autor usa mymath como su nombre de paquete, y el mismo nombre para la carpeta que contiene los archivos del paquete)
Cada vez que usted cree un paquete, debería crear una nueva carpeta en el directorio src, las carpetas son nombradas normalmente de la misma forma que lo hacemos con el paquete que vamos a utilizar. Usted puede tener varios niveles de directorios si lo queremos. Por ejemplo, creamos los directorios $GOPATH/src/github.com/astaxie/beedb, entonces la ruta del paquete es github.com/astaxie/beedb. El nombre del paquete va a ser el ultimo directorio de la ruta del mismo, que en este caso es beedb.
Ejecute los siguientes comandos. ( Ahora el autor vuelve a hablarnos sobre algunos ejemplos )
cd $GOPATH/src
mkdir mymath
Creamos un nuevo archivo llamado sqrt.go, y dentro colocamos el siguiente contenido.
// Código fuente de $GOPATH/src/mymath/sqrt.go
package mymath

func Sqrt(x float64) float64 {
    z := 0.0
    for i := 0; i < 1000; i++ {
        z -= (z*z - x) / (2 * x)
    }
    return z
}
Ahora mi directorio del paquete es creado y el código funcional esta hecho. Yo recomiendo que mantengan el mismo nombre para el paquete y la carpeta que contiene los archivos fuentes del mismo.

Paquete compilados

Ya hemos creado nuestro paquete como lo escribimos arriba, pero, como compilamos esto de forma práctica? Hay dos maneras para hacer esto.
  1. Diríjase hacia la ruta donde se encuentra su paquete y ejecute el comando go install.
  2. Ejecutar el comando anterior con el nombre del paquete, por ejemplo: go install mymath.
Después de compilar, nosotros podemos abrir la siguiente carpeta.
cd $GOPATH/pkg/${GOOS}_${GOARCH}
// Se puede ver que se generó el archivo
mymath.a
El archivo con extensión que se generó .a es un archivo binario de su paquete, y como podemos usarlo?
Obviamente, nosotros necesitamos crear una nueva aplicación que lo use.
Creamos una nueva aplicación llamada mathapp.
cd $GOPATH/src
mkdir mathapp
cd mathapp
vim main.go
codigo
//$GOPATH/src/mathapp/main.go código fuente.
package main

import (
    "mymath"
    "fmt"
)

func main() {
    fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2))
}
Para compilar esta aplicación, debemos cambiar al directorio donde se encuentra la aplicación que es en este caso $GOPATH/src/mathapp, entonces ejecutamos el comando go install. Ahora deberíamos ver un archivo ejecutable llamado mathapp que fue generado en el directorio $GOPATH/bin/. Para ejecutar el programa, debemos usar el comando ./mathapp, entonces deberíamos ver los siguiente en la terminal.
Hello world. Sqrt(2) = 1.414213562373095

Instalar paquetes remotos

Go tiene una herramienta para instalar paquetes remotos, que es el comando llamado go get. Este tiene soporte para la mayoría de las comunidades de software libre, incluidas Github, Google Code, BitBucket, and Launchpad.
go get github.com/astaxie/beedb
Usted puede utilizar el comando go get -u … para actualizar estos paquetes remotos, y esto va a instalar automáticamente todos los paquetes de los que depende también.
Esta herramienta utiliza diferentes herramientas de control de versiones para las diferentes plataforma “Open Source”. Por ejemplo, git para Github, hg para Google Code. Por lo tanto, uno debe instalar estas herramientas para el manejo de control de versiones para poder utilizar la herramienta go get.
Despues de ejecutar los anteriores comandos, la estructura de directorios debería ser similar a la siguiente.
$GOPATH
    src
     |-github.com
         |-astaxie
             |-beedb
    pkg
     |--${GOOS}_${GOARCH}
         |-github.com
             |-astaxie
                 |-beedb.a
Lo que realmente realizar go get, es clonar el código fuente hacia el directorio $GOPATH/src y en sistema de archivos local, y luego ejecuta el comando go install.
Utilizaremos los paquetes remotos de la misma manera que usamos los paquetes que creamos localmente.
import "github.com/astaxie/beedb"

Estructura de directorio completa

Si siguió todos los pasos, su estructura de directorio debería verse como la siguiente.
bin/
    mathapp
pkg/
    ${GOOS}_${GOARCH}, such as darwin_amd64, linux_amd64
  mymath.a
  github.com/
    astaxie/
      beedb.a
src/
    mathapp
        main.go
    mymath/
        sqrt.go
    github.com/
        astaxie/
            beedb/
                beedb.go
                util.go
Ahora puede ver claramente la estructura de directorios , bin va a contener los archivos ejecutables, pkg va a contener archivos compilados, y src va a contener los archivos de código fuente.
(El formato de las variables de entorno en Windows es %GOPATH%, este libro utiliza principalmente el estilo usado por sistemas Unix-like, por eso los usuarios Windows necesitaran reemplazarlo por su cuenta.)
 
 Indice