A humble attempt at getting the functionality of virtualenv for go.
A working GO version >= 1.4
I often find myself working in different projects during the day, some might use different versions of go and most definitely all are better off having separate GOPATHS.
What I am attempting here is to automate a way to switch between GOPATHS and to get new golang versions.
###First run will ask you for a working goroot, so it can compile go versions.
####Creating environments:
goworkon --go-version 1.7 create envname gopathlocation
This will create:
- A GOPATH for envname
- A config for envname (in $HOME/.local/share/goworkon/configs/envname.json
- If there is no 1.7 in $HOME/.local/share/goworkon/install/ it will be checked out and built.
####Switching to an environment:
. goactivate envname
This will (most likely only in bash):
- export PATH as $PATH:/this/go/version/bin/:$GOPATH/bin
- export GOPATH as $HOME/.local/share/goworkon/gopath
- export PS1 as
$PS1(envname)$ (this requires PS1 to be exported)
as an alternative you can
goworkon switch envname
and you will see the variables that need to be set printed for you to write whatever suits your shell.
####Un-switching
. goactivate
will return the environment to its former state.
as an alternative
goworkon switch
###Listing
goworkon list
Will print a detailed list of environments.
goworkong set default <envname> . goactivate <envname>
Will set envname as the default environment, this environment will not change PS1 variable and can be switched in .bashrc its intended to be used as the general one.
####Setting global settings
goworkon set <attribute> [value]
will set <attribute>
settings value if its a valid one (you will get an error otherwise)
if value is not passed the attribute will be blanked.
####Setting environment settings
goworkon set envname@<attribute> [value]
will set <attribute>
environment config value if its a valid one (you will get an error otherwise)
if value is not passed the attribute will be blanked.
Interesting settings:
goworkon set envname@globalbin "true"
sets a flag in the project that makes its $GOPATH/bin included in all envs, very useful for tools that you build but want to keep separate.
####Updating a Go version:
goworkon update --go-version 1.7 [envname]
Will update the go version in use to 1.7.latest and then (in next release) rebuild envs using 1.7
goworkon update envname
Will udpate the env to the latest available version of go.
goworkon update --go-version 1.7
Will update all projects using 1.7.x to the latest version of 1.7
####TESTS This was an attempt to replace bash scripts I was using for this so I sort of just coded it in a couple of sittings so it needs extensive tests
####Debug output Debug log level should be setable and proper information should be added to the logging.
####Setting build steps:
goworkon build-steps wathever you please here semicolon separated
Will set the steps there, a special case
goworkon build-steps _1;_2;wathever you please semicolon separated;_3
Will replace _#
for that step number, the same will apply to remove-steps
goworkon build-steps --clear
Will delete the steps
goworkon build-steps
Will print the steps properly numbered like so:
_1: do something _2: do something else
####More ideas:
- Write a rebuild command for the current env