#1.2 $GOPATH y nuestro entorno de trabajo
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.
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.
Ya hemos creado nuestro paquete como lo escribimos arriba, pero, como compilamos esto de forma práctica? Hay dos maneras para hacer esto.
- Diríjase hacia la ruta donde se encuentra su paquete y ejecute el comando
go install
. - 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
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"
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
- Sección anterior: Instalación
- Siguiente sección: Comandos con Go