goenv

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

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

README

.. -*- 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
   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 
   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
   bar
   foo *

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

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

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.2
   * /opt/goenv/go1.0.3
     /opt/goenv/release

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.2
   * /opt/goenv/go1.0.3
     /opt/goenv/release


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.

CONTRIBUTORS
============

* Yoshi YAMAUGUCHI (@ymotongpoo)

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

Documentation

Overview

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