Goenv - Go Environment Manager

Posted on Sun 19 April 2015 in Go, HowTo, Programmazione

To briefly explain what Goenv is, I will assume you have previously worked with Python. Basically it's what Virtualenv is for Python. Goenv (and it's wrapper goof) creates a folder for a new project and set the $GOPATH env variable to that folder path. At this point every time you do go get, the libraries will be installed in that specific $GOPATH.

It's very important to use separate $GOPATH for each project, because this allow us to use different library versions for each project and avoid version conflicts.

Installation

git clone https://bitbucket.org/ymotongpoo/goenv
cd goenv
go build -o goenv *.go
chmod +x goenv
sudo cp goenv /usr/bin

Goenv is now installed, we will now install its wrapper goof:

sudo cp shellscripts/goenvwrapper.sh /usr/bin

Edit .bashrc (or .zshrc if you use zsh) and append these lines:

export GOENVHOME=$HOME/goenvs
source /usr/bin/goenvwrapper.sh

How to use it

To create a new go environment use make:

goof make go-test
Do you want to create all parental directory of '/Users/andrea/goenvs/go-test'? [y/N]: y
Environment /Users/andrea/goenvs/go-test created!
(go:go-test) ➜  go-test

To exit the go environment use deactivate:

(go:go-test) ➜  go-test  deactivate
go-test

To use an environment use workon:

go-test  goof workon go-test
(go:go-test) ➜  go-test

To show available environments use show:

(go:go-test) ➜  go-test  goof show
go-test

Goenv itself is not enough to manage Go packages. It would be like using Virtualenv only and not using pip and requirements. In a future post I will explain how to use Godep.