A humble attempt at getting the functionality of virtualenv for go.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
actions
environment
goinstalls
goswitch
paths
.gitignore
LICENSE
README.md
command_create.go
command_list.go
command_set.go
command_switch.go
command_update.go
commands.go
goactivate
main.go

README.md

goworkon

A humble attempt at getting the functionality of virtualenv for go.

Requirements

A working GO version >= 1.4

Rationale

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.

Usage

###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.

Default environment

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

To be implemented.

####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