command module
v0.0.0-...-b6c4948 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Jan 27, 2017 License: BSD-3-Clause Imports: 10 Imported by: 0


.. -*- restructuredtext -*-
 goenv -- Go environment manager

1. What's this

``goenv`` is command line tool to create Go project.

2. Install

2.0 pre-requirements

* In advance of using installation scripts, please make sure directories specified by ``$GOENVGOROOT`` and ``$GOENVTARGET`` exist and those permissions are correctly set.

* Make sure ``git`` is installed.

2.1 Fast installation

If you are already using Go and have existing GOROOT with built Go binaries and you do not need to install Go binaries with goof command, install goenv with fast-install.sh.

To install ``goenv``, get all code for it and put built program into appropriate directory::

   $ git clone https://bitbucket.org/ymotongpoo/goenv
   $ cd goenv
   $ go build -o goenv -ldflags "-s -w" *.go
   $ chmod +x goenv
   $ cp goenv /path/to/bindir

or you can run a following command for procedure all above::

   $ export GOENVTARGET=/path/to/install/target
   $ curl -L https://bitbucket.org/ymotongpoo/goenv/raw/master/shellscripts/fast-install.sh | zsh

(Author is using zsh)

2.2 Go initial installation

You have to set following variables beforehand:

* ``GOENVGOROOT``: Go binary install target. All Go binaries are installed under this directory. 
* ``GOENVTARGET``: goenv install target. goenv and goenvwrapper.sh are installed here.
* ``GOENVHOME``: All workspaces created with ``goof`` command are here.

ex) ``~/.zshrc``::

  export GOENVGOROOT=$HOME/.goenvs
  export GOENVTARGET=$HOME/bin
  export GOENVHOME=$HOME/workspace

If you're fine with installing Go from the source code and goenv at the same time, use initial-install.sh::

   $ curl -L https://bitbucket.org/ymotongpoo/goenv/raw/master/shellscripts/initial-install.sh | zsh

When the installation that ``release`` version of golang is finished, you can set the ``GOROOT`` variable and adding ``$GOROOT/bin`` to ``$PATH``.
ex) ``~/.zshrc``::

  export GOROOT=$GOENVGOROOT/release
  export PATH=$GOROOT/bin:$PATH

3. Usage

3.1 Basics

``goenv`` is quite simple tool and usage is as following::

   goenv [-go GOROOT] [-deps <additional GOPATH>] [-gae] envname
   goenv -version

``-go`` option is used when we need to use different Go binary.

``-deps`` option is for adding ``GOPATH`` in case that the projects depends on local 3rd party packages.

For instance, when you are to create independent project ``foo``, just run::

   goenv foo

It create directory ``foo`` in following manner::

   % tree foo
    ├── activate
    └── src/ 

To activate ``foo`` project's environment, load ``activate`` file and required environment variables will be set properly::

   % source foo/activate
   (go:foo) %

In order to deactivate current environment and rollback to what it was, call ``deactivate`` function::

   (go:foo) % deactivate

3.2 GAE/Go support

``goenv`` also supports creating GAE/Go environments. With ``-gae`` option, it generates ``app.yaml`` and initial Go file for GAE/Go as well as ``activate`` script.
For instance, if you create a workspace ``gaetest`` with this option, directory structure of a generate workspace would be::

   % goenv -gae gaetest
   % tree gaetest 
   ├── activate
   └── src
          ├── app.yaml
          └── gaetest.go

At the same time, ``-gae`` option sets path to ``"$GAEGO"`` at the head of ``PATH``, where ``GAEGO`` is path to Google App Engine for Go SDK.

4. Support tool (``goof``)

4.1 Basics

``goof`` -- goenv wrapper for goofy gophers -- command is provided from goenvwrapper.sh to enhance the power of ``goenv``.
install.sh will put goenvwrapper.sh in the same directory as ``goenv`` command is installed.
To use ``goof`` command, load functions there with ``source`` command or add following line in your .bashrc::

   export GOENVHOME=/path/to/environment_root
   source /path/to/goenvwrapper.sh

``goof`` command has following 5 subcommands.

``make`` creates environment with specified environment name under $GOENVHOME::

   % goof make foo
   (go:foo) % 

``make`` option accepts ``goenv`` command options, so you can create GAE skeleton project with following command for instance::

   % goof make foo -gae

``show`` shows all existing environments. Environment with '*' mark is current environment::

   (go:foo) % goof show
   foo *

``workon`` switches current environment to specified environment::

   (go:foo) % goof workon bar
   (go:bar) %
   bar *

To delete unnecessary environment, run ``remove`` with the environment name::

   (go:bar) % goof remove foo
   bar *

4.2 Go install support

From goenv version 0.4.0, goof supports installing Go itself. In order to ``goinstall`` subcommand, set ``GOENVGOROOT`` environment variable::

   % export GOENVGOROOT=/opt/goenv

``goinstall`` subcommand works with tag of the Go repository, such as "go1.0.3", "release.r60" and "weekly.2012-01-27".
For first call of ``goof goinstall``, it fetches all source from Go repository into $GOENVGOROOT::

   % goof goinstall go1.0.3
   [goof] Go source code initial checkout.
   [goof] 'go1.0.3' is installed in /opt/goenv/go1.0.3

All installed Go binaries are shown with ``goinstall`` subcommand without arguments::

   % goof goinstall
     /opt/goenv/go (repository)
   * /opt/goenv/go1.0.3

You can also uninstall Go binaries with ``-u`` option before version number::

   % goof goinstall -u go1.0.2
   [goof] uninstalled version 'go1.0.2'

When you need to confirm all tags, give "tags" as an argument::

   % goof goinstall tags
   tip                            15392:7bc28d72d49c
   release                        13677:2d8bc3c94ecb
   go1.0.3                        13677:2d8bc3c94ecb
   go1.0.2                        13230:5e806355a9e1
   go1.0.1                        12994:2ccfd4b451d3
   go1                            12872:920e9d1ffd1f

``goof go`` replaces current GOROOT with specified Go version::

   % goof go go1.0.2
   % goof goinstall
     /opt/goenv/go (repository)
   * /opt/goenv/go1.0.3

4.3 Advanced option

``goof make`` is supporting ``gocode`` and ``godef`` installation which are code auto-completion tool for and code search assistance for go respectively.
Either of them will be installed under ``GOPATH/bin``::

   % goof make test -gocode -godef
   % ls $GOPATH/bin/
   gocode godef

5. Contribution

Any contribution to this project are welcome. 
If you are to send patch to this repository, please request to develop branch, because this project is developed under `A Successful Git branching model <http://nvie.com/posts/a-successful-git-branching-model/>`_.
All patches to other branches than develop will be ignored unless those are application for hotfix branches.

6. License

``goenv`` is an open source project with BSD-style license. See ``LICENSE`` file for details.


* Yoshi YAMAUGUCHI (@ymotongpoo)

* Takanao ENDOH (@MiCHiLU)
* Tetsuya Morimoto (@t2y)



Copyright 2012 Yoshifumi Yamaguchi, All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

Copyright 2012 Yoshifumi Yamaguchi, All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL