Responses to a question like this tend to be either very detailed, or
vague. This one has all the gory details.
I develop under Linux. I'm happy to use fancy visual tools, but I also do
a lot of stuff from the command line.
I have a directory GOCODE where I put stuff that I fetch via go get. I set
this up In my .profile, and put the bin directory in my path along with the
Go bin directory:
GOPATH=$HOME/gocode
export GOPATH
PATH=/usr/local/go/bin:$HOME/gocode/bin:$PATH
export PATH
(Under Linux you can create a variable and export it in one command, but
that doesn't work across all UNIX systems.)
You may want to include your go tools bin directory in the path as well.
With this .profile, once I'm logged in, I have a GOPATH variable containing
my gocode directory.
I keep each of my Go projects in a separate directory. In the top level
directory of each project I create a file setenv.sh containing this:
if test -z $GOPATH
then
GOPATH=`pwd`
export GOPATH
else
GOPATH=$GOPATH:`pwd`
export GOPATH
fi
PATH=`pwd`/bin:$PATH
export PATH
That notation `pwd` in grave accents, means the current directory, so I can
just copy this file from one project to another and it will work, as long
as you run it from the right directory.
To set up GOPATH for a project, I start a command window, change directory
to the project and run the commands in setenv.sh:
. setenv.sh
(Note the "." at the start - see later about that.) If GOPATH doesn't
already exist, it's created and contains just the current directory. If it
exists, the current directory is added. Then the local bin directory is
added to my path. YOU NEED TO BE IN THE RIGHT DIRECTORY, the top level of
your project (the one that contains src, pkg, bin etc.)
For example, if my project is $HOME/project1 and my .profile is set up as
above, then GOPATH would contain something like
/home/simon/gocode:/home/simon/project1
Now the go command can find my project and anything I've downloaded via "go
get".
My PATH variable will contain
/home/simon/project1/bin:(whatever was already in the path)
so any command that I build within this command window is in my path. In
my .profile I set up the path to include the go and gocode bin directories,
so that stuff is in my path too.
Strictly, I don't need the setenv.sh file. I could just cd to the right
directory and run this command by hand:
GOPATH=$GOPATH:`pwd`
As long as you cd to the right directory first. In fact the main purpose
of creating the setenv.sh files is to remind me which directory I should be
in when I run the commands!
If GOPATH contains a colon-separated list of directories as above, "go get"
uses the first one in the list. In my case that will always be my gocode
directory, because I set it up that way in my .profile, and my setenv.sh
files ensure that it's kept as the first directory. That means I can run
"go get" in any command window and it will always put stuff in the same
place.
If I run a tool such as liteide from my command window having run
setenv.sh, it picks up the GOPATH that I set up.
If you use an IDE (liteide, eclipse, intellij or whatever) then you can
simply set up a local GOPATH variable in the ide. The technique I describe
above is not quite so slick, and depends upon you remembering to run the
commands in setenv.sh before you start working, but if you still want the
option of running commands from a command window, you need something like
this.
A note for people who are not Linux shell experts: setenv.sh looks like a
shell script, but it isn't. If you ran it as a shell script it wouldn't
work. Any variables that a shell script set up are lost when the shell
script ends, so your script would set up GOPATH and then discard it. You
need to run setenv.sh using the "." command as above.
I've used all sorts of UNIX magic here - shell if commands, running
commands in grave accents, running commands using "." and so on. If you
are working under Windoze, none of this will work, but you can do similar
stuff using batch files.
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.