Coder Social home page Coder Social logo

oo's Introduction

OO - Go Version Manager

Latest version: 0.1.0

oo was heavily inspired by tj/n.

Requirements

Supported system:

  • Mac OSX
  • Linux

Requirements:

  • Bash
  • Curl

Install

  1. Clone this repo.

    git clone https://github.com/hit9/oo.git $HOME/.oo
  2. Add this to your bashrc or zshrc:

    source $HOME/.oo/env

    Or this if you are using fish shell:

    source $HOME/.oo/env.fish

Note that you still need to set GOPATH manually in your bashrc or zshrc, oo doesn't take care of that:

export GOPATH=/path/to/your/gopath
export PATH=$PATH:$GOPATH/bin

Examples

Get go1.12.6 installed:

$ oo get 1.12.6

Then, the go1.12.6 is ready:

$ go version
go version go1.12.6 darwin/amd64

Use go1.12.6 as current go (or just oo 1.12.6):

$ oo use 1.12.6
=> go1.12.6

Run go from 1.12.6 temporary:

$ oo as 1.12.6 version
go version go1.12.6 darwin/amd64
$ oo as 1.12.6 run helloworld.go
Hello world!

List all installed go versions

$ oo ls
   1.12.5
=> 1.12.6

Build (or rebuild) go by version:

$ oo build 1.12.6
build go1.12.6..
build successfully

Get current go binary path:

$ oo bin
/Users/hit9/github/oo/go/bin/go

Remove a version:

$ oo rm 1.12.5                                                                                                                                                                          1 ↵ (go1.4 [email protected]) ~/github/oo/versions/1.5/src
[email protected] removed

You may need to download a prebuilt golang on the first run, if there's no golang installed, bootstrap won't work.

Using Prebuilt

By default, oo prefers to bootstrap a new version via an existing installed version:

$ oo get 1.12.6
get https://codeload.github.com/golang/go/tar.gz/go1.12.6..
######################################################################## 100.0%
using go1.12.5 to bootstrap go1.12.6....
build successfully
=> go1.12.6

But we are still able to download a prebuilt packages directly from https://golang.org/dl/ without a build waiting:

$ oo get 1.10.3 --use-prebuilt
get https://dl.google.com/go/go1.10.3.darwin-amd64.tar.gz..
######################################################################## 100.0%
=> go1.10.3

Usage

Usage: oo [COMMAND]

Commands:
  oo                         Output current go version
  oo ls                      Output versions installed
  oo <version>               Use go <version>
  oo use <version>           Use go <version>
  oo get <version>           Get go <version>
  oo rm <version>            Remove the given version
  oo as <version>            Run go from oo on a specific version
  oo dir [<version>]         Show go directory by version
  oo bin [<version>]         Show go binary path by version
  oo build [<version>]       Build go by version
  oo env                     Output current go env
  oo upgrade                 Upgrade oo to latest version

Options:
  -v, --version              Output oo's version
  -h, --help                 Output this help message

Environment Variables:
  OO_MIRROR_PATTERN          Mirror url pattern to download go source tarball
                             default: https://codeload.github.com/golang/go/tar.gz/go%s
  OO_BUILD_CMD               Command to build go from source, default: ./make.bash
  OO_BOOTSTRAP_VERSION       Bootstrap go version to compile the target version,
                             default: the latest installed version

  PREBUILT_PKG_URL_PATTERN   Url pattern to download pre-built go package
                             default: https://dl.google.com/go/go%s.%s-amd64.tar.gz
                             The first parameter here is version, the second is platform.
                             Use https://dl.google.com/go/go%s.%s-arm64.tar.gz for arm64 platforms (e.g. Mac M1).
Version: 0.0.7

Custom Mirror

To use custom mirror url to download golang source:

$ export OO_MIRROR_PATTERN='https://storage.googleapis.com/golang/go%s.src.tar.gz'
$ oo get 1.12.6
get https://storage.googleapis.com/golang/go1.12.6.src.tar.gz..
##########                                                                14.4%

To use custom mirror url to download prebuilt golang package:

$ export PREBUILT_PKG_URL_PATTERN=https://dl.google.com/go/go%s.%s-arm64.tar.gz
$ oo get 1.16.3 --use-prebuilt
get https://dl.google.com/go/go1.16.3.darwin-arm64.tar.gz..
########################################################################################################################################################################################################################## 100.0%
=> go1.16.3

You can add these environment variables to your bashrc or zshrc etc. for convenience.

Similar Projects

Troubles

If there are any errors during the bootstrap building, it's helpful to build manually to check what errors occurred:

cd path/to/oo/versions/x.x.x/src
GOROOT_BOOTSTRAP=path/to/downloaded/go ./all.bash

License

MIT.

oo's People

Contributors

hit9 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

oo's Issues

Add oo in brew

Nowadays I am using OSX and I would max support install for brew. When I saw your project I like it and would that see it on brew formula. What do you think?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.