I joined a project, and I begin to develop an application in it. This project has used golang. So I studied it and prepared its developing environment.
This article is the what I did to make development environment of GO.
Prerequisite
- Install VirtualBox
- Install Vagrant
What our golang project needs.
Glide
Glide manage a project dependency.
What is the difference between "go get" and "Glide"
As far as I searched, "go get" just installs a package into your local directory, and solves library dependencies. By contrast, "Glide" is package manager sort of npm. It uses a file defined depending packages.
Fresh
Fresh is an auto-reloader for a web application. When you change a file of golang or template, Fresh reload (recompile) the file automatically, and apply the web application.
Goose
Goose is a migration tool.
Provision
Add provisioning config
We'll provision from a shell script file.
Vagrantfile
Vagrant.configure("2") do |config|
...
config.vm.provision :shell, path: "bootstrap.sh"
...
end
Environment variable golang uses
Golang uses GOROOT and GOPATH environment variables.
To installing a custom location use the GOROOT. If you don't want change one, you don't need to set this environment variable.
The GOPATH is used to specify directories for a golang project.
Install Go
Install Go and set GOROOT, GOPATH and PATH.
Install go and set environment variables for go
apt-get update
apt-get -y install curl git
wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
tar -xvf go1.8.3.linux-amd64.tar.gz
mv go /usr/local
export GOROOT=/usr/local/go
export GOPATH=/vagrant/go
mkdir -p $GOPATH/bin
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin
source ~/.bashrc
And You should add commands because GOROOT, GOPATH and PATH I set in bootstrap.sh doesn't influence the vagrant environment.
The environment variables for golang in the vagrant environment
echo 'export GOROOT=/usr/local/go' >> /home/vagrant/.bashrc
echo 'export GOPATH=/vagrant/go' >> /home/vagrant/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin:$GOROOT/bin' >> /home/vagrant/.bashrc
I install Glide.
Install Glide
curl https://glide.sh/get | sh
In the vagrant environment
Solve library dependency with Glide
It's simple; you just execute above command.
Install glide
$ glide install
And install Fresh and Goose by go get
.
Install Fresh and Goose
$ go get github.com/pilu/fresh
$ go get bitbucket.org/liamstask/goose/cmd/goose
Install protobuf
I referred to this article.
Install protobuf
$ curl -OL https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip
$ unzip protoc-3.3.0-linux-x86_64.zip -d protoc3
$ sudo mv protoc3/bin/* /usr/local/bin/
$ sudo mv protoc3/include/* /usr/local/include/
Install Mono
I had to install an old version of Mono for the project reason. So I install it from tar ball.
This article is useful for me.
Install Mono
$ sudo apt-get install g++ gettext make
$ http://download.mono-project.com/sources/mono/mono-2.11.4.tar.bz2
$ tar xvjf mono-2.11.4.tar.bz2
$ cd mono-2.11.4
./configure --prefix=/opt/mono-2.11
$ make
$ make install
ln -s /opt/mono-2.11/bin/mono /usr/bin/mono
ln -s /opt/mono-2.11/bin/gmcs /usr/bin/gmcs