Go Installer

A Mac & Linux Go Multi-Version Installer

Go Installer
GitHub - ProjectApario/igo: igo installs go on your system
igo installs go on your system. Contribute to ProjectApario/igo development by creating an account on GitHub.

Since the Apario Reader, Writer and Search applications are written with Go, and the packages figtree, textee, and gematria, power the experience called StumbleInto. I figured that part of this public service movement would need to include a Go installer and one that is powerful and useful. I built it around my engineering workflow and it works seamlessly.

igo -v
v1.1.0 - igo open source at github.com/ProjectApario/igo

igo -l # list (lowercase "L")
igo -e # show environment
igo -a <version> # activate <version> if its installed
igo -s <version> # switch to <version> if its installed (alias to activate)
igo -f <version> # fix <version> installation
igo -u <version> # uninstall <version> from -godir <path>
igo -i <version> # install <version> from -godir <path>

# custom godir with debug
igo -i 1.23.4 -godir /Shared/go -debug

Once a version has been installed, you can interact with Go through the shims. This means when you clone a project that is written in Go, or has a go.mod file in it, the shim will automatically install that version of Go needed for the runtime of Go.

It's ironic that a Go installer has been written in Go, and its equally ironic that Go was written in Go as well. Nonetheless, the binary works.

# MacOS Apple Silicon
curl -L https://github.com/andreimerlescu/igo/releases/download/v1.1.0/igo-darwin-arm64 ~/bin/igo
# MacOS Apple Intel
curl -L https://github.com/andreimerlescu/igo/releases/download/v1.1.0/igo-darwin-amd64 ~/bin/igo
# Linux arm64
curl -L https://github.com/andreimerlescu/igo/releases/download/v1.1.0/igo-linux-arm64 ~/bin/igo
# Linux amd64
curl -L https://github.com/andreimerlescu/igo/releases/download/v1.1.0/igo-linux-amd64 ~/bin/igo

# Remove Apple Quarantine Blocker
command -v xattr 2> /dev/null && xattr -d com.apple.quarantine ~/bin/igo

# Set Permissions
chmod +x ~/bin/igo && export PATH=~/bin:$PATH

# Use IGO!
igo -l

    igo [open source at github.com/ProjectApario/igo]
    ┌──────────┬──────────────────┬─────────────┐                                                                                     
    │ VERSION  │     CREATION     │   STATUS    │
    ├──────────┼──────────────────┼─────────────┤
    │ 1.24.3   │ 2025-05-22 11:15 │             │
    │ 1.24.0   │ 2025-05-23 09:37 │             │
    │ 1.23.4   │ 2025-05-22 11:30 │             │
    │ 1.23.2   │ 2025-05-22 11:24 │             │
    │ 1.23.0   │ 2025-05-22 11:23 │             │
    │ 1.22.7   │ 2025-06-02 22:49 │             │
    │ 1.22.6   │ 2025-06-02 22:47 │  * ACTIVE   │
    │ 1.22.5   │ 2025-05-24 09:59 │             │
    ├──────────┼──────────────────┼─────────────┤
    │ I ❤ YOU! │ Made In America  │ Be Inspired │
    └──────────┴──────────────────┴─────────────┘

By default on macOS, you'll need to remove the com.apple.quarantine xattr from the igo binary before you can run it in your Terminal or iTerm2 application.

As you move from project to project, you'll automatically get copies of cli-gematria, summarize, counter, genwordpass, and govulncheck. Additional extras can be designed with your ~/.bashrc or ~/.zshrc file by adding:

export EXTRAS=true
export EXTRA_PACKAGES="genwordpass=github.com/ProjectApario/genwordpass,summarize=github.com/andreimerlescu/summarize,counter=github.com/andreimerlescu/counter,govulncheck=golang.org/x/vuln/cmd/govulncheck,go-generate-password=github.com/m1/go-generate-password/cmd/go-generate-password,cli-gematria=github.com/andreimerlescu/cli-gematria"

The format of the long string is "name=url,name=url,name=url" and in this case, there are 6 total. This convention allows you to override the defaults using environment variables.

This multi-version manager of Go allows me to have 6+ versions of Go installed. A lot of projects depend on different versions of Go, so its important that when using the go command, you're using the package and modules environment that is correctly defined. The igo package and the go / gofmt shims provide that experience. This was previously published under the name of install-go and that was a collection of bash scripts. The only bash in igo are the shims. The installer, uninstaller, fixer, etc. is all written in Go.

The package has been tested extensively using Docker and GitHub Actions and is open source for learning and empowering your curiosity in how to make the little Gophers Go!

Be Inspired!