Un paseo tÃpico por las tierras de goworkon
Después de unas semanas trabajando en él y también con él, saqué de encima la mayorÃa de las molestias urgentes de goworkon.
Asà que, ahora que ya me quité eso de encima, puedo dar una pequeña vuelta sobre cómo usar goworkon v0.1alpha1.
Arrancando
El arranque todavÃa es un poco tosco, pero lejos de ser doloroso.
Suponiendo que instalaste goworkon (en mi caso simplemente usé uno de mis entornos de ese momento
y corrà go get -u github.com/perrito666/goworkon y listo.) vas a necesitar
agregar algo a tu ~/.bashrc (quizás uses otra shell, no te puedo garantizar que esto
funcione ahÃ.
Lo primero que tenés que hacer es hacer source del archivo bash provisto; en mi caso fue simplemente:
source $GOPATH/src/github.com/perrito666/goworkon/goactivate but
Yo usé la ruta absoluta en cambio porque para esto quité mi declaración de GOPATH del archivo .bashrc.
Esto hará que el comando goactivate esté disponible en tu shell. Dado que los procesos que corren
en tu shell no pueden cambiar directamente las variables de entorno, goactivate resuelve eso parseando la
salida de goworkon switch y seteando las variables desde una función bash.
Hay un poco más para configurar en .bashrc, pero eso lo veremos más adelante.
Una vez que todo está listo, podemos empezar.
Primer entorno
Al correr goworkon por primera vez, se te pedirá un
$GOROOT funcional; esto es necesario porque vamos a compilar go desde el código fuente para cada nueva
versión y su único requisito es un $GOROOT más nuevo que 1.4.
Nota: En futuras versiones lo más probable es que esto se adivine y la ruta se actualice con cada nueva instalación de go
Para crear un entorno debemos correr
goworkon create [--go-version=1.7] <envname> <envabspath>
¿Qué pasa acá?:
Create realizará las siguientes acciones:
- Si no se solicita la versión de go, la última versión se adivinará desde el sitio de go.
- Si la versión de go no está instalada, se descargará y compilará.
- Si envname existe será un noop.
- Guardar todos los datos del entorno en ~/.local/share/goworkon/configs/
.json , que podés editar para adaptarlo a tus necesidades, aunque se proveen herramientas para las partes relevantes y se proveerán para el resto en próximas versiones.
Lo que hice para mi máquina de trabajo principal es.
goworkon create --go-version=1.7 default /home/myuser/environments/default
La ruta del entorno (que será el $GOPATH) no se crea hasta que hacés go get de algo.
Estableciendo un predeterminado
Por varias razones mantengo un entorno “todoterreno” que me gusta tener siempre establecido cuando entro a mi shell. Este se llama el entorno predeterminado y podés elegir cualquiera de los tuyos.
Yo elegà default, asà que corrÃ.
goworkon set default default
Para ayudar con esto agregué al final de mi ~/.bashrc lo siguiente:
goactivate default
Lo cual se asegura de que siempre aterrice en mi bash con default en el path.
Cambiando a otros entornos.
Suponiendo que sos como yo, default es el que podrÃas usar para cosas informales, pero vas a querer tener un entorno por proyecto.
Personalmente me gusta incluso tener un entorno distinto por cada software que compilo para mi propio uso, salvo por varias herramientas de go como godeps.
Para cambiar necesitás usar goactivate:
goactivate <envname>
Esto seteará las siguientes variables:
- $GOPATH a la ruta de tu entorno.
- $PATH para incluir la carpeta /bin de tu entorno.
- $PS1 para incluir (envname)$ al final (esto solo funciona si exportás tu $PS1, lo cual normalmente no se hace)
Si el script provisto no es adecuado para tu shell, podés correr:
goworkon switch <envname> y eso devolverá unas cuantas lÃneas de texto que contienen VARIABLE=valor para que las setees en tu shell.
Saber qué hay en tus entornos.
Finalmente agregué un comando simple para listar los entornos que da algún detalle extra, es (sÃ, adivinaste)
goworkon list
Y la salida se ve más o menos asÃ:
(1.7.1) "caddy":/home/user/environments/caddy
(1.7.2) "default":/home/user/environments/default
(1.7.2) "goworkon":/home/user/environments/goworkon
(1.7.1) "hugo":/home/user/environments/hugo
En el futuro mostrarán más información, pero el formato actual incluye:
(goversion) "envname":"env GOPATH"
Configuraciones
Hay dos tipos de configuraciones en goworkon
Configuraciones globales, que por el momento solo incluyen la palabra clave default para elegir cuál es tu entorno predeterminado.
La invocación para ellas es:
goworkon set <variable> <value>
Configuraciones locales, que se establecen por entorno y por el momento solo incluyen la clave globalbin, que indica que el /bin de ese entorno siempre deberÃa agregarse al $PATH, lo cual es muy útil cuando, como yo, te gusta compilar cada software en un entorno (también útil al empaquetar).
La invocación es:
goworkon set <environment>@<variable> <value>
Llamar a set con una variable y sin valor la dejará en blanco; cuando la variable es booleana, quitarla la vuelve false y el string "true" la vuelve true.
Qué queda pendiente.
Hay un esbozo del comando update que actualizará la versión de go, pero la reconstrucción del entorno todavÃa no está implementada, ya que depende de que se implemente la funcionalidad de build-steps, asà que esperala en las próximas semanas.
Pseudo Vendoring, tengo la intención de agregar un comando freeze que te dé un archivo con todos los paquetes que hay actualmente en tu entorno y las versiones que se pueden usar para reconstruirlo.
Testing, me falta mucho testing.
Si tenés alguna sugerencia no dudes en abrir un issue en github o encontrame en freenode como perrito666