|  | # getgo | 
|  |  | 
|  | A proof-of-concept command-line installer for Go. | 
|  |  | 
|  | This installer is designed to both install Go as well as do the initial configuration | 
|  | of setting up the right environment variables and paths. | 
|  |  | 
|  | It will install the Go distribution (tools & stdlib) to "/.go" inside your home directory by default. | 
|  |  | 
|  | It will setup "$HOME/go" as your GOPATH. | 
|  | This is where third party libraries and apps will be installed as well as where you will write your Go code. | 
|  |  | 
|  | If Go is already installed via this installer it will upgrade it to the latest version of Go. | 
|  |  | 
|  | Currently the installer supports Windows, \*nix and macOS on x86 & x64. | 
|  | It supports Bash and Zsh on all of these platforms as well as powershell & cmd.exe on Windows. | 
|  |  | 
|  | ## Usage | 
|  |  | 
|  | Windows Powershell/cmd.exe: | 
|  |  | 
|  | `(New-Object System.Net.WebClient).DownloadFile('https://get.golang.org/installer.exe', 'installer.exe'); Start-Process -Wait -NonewWindow installer.exe; Remove-Item installer.exe` | 
|  |  | 
|  | Shell (Linux/macOS/Windows): | 
|  |  | 
|  | `curl -LO https://get.golang.org/$(uname)/go_installer && chmod +x go_installer && ./go_installer && rm go_installer` | 
|  |  | 
|  | ## To Do | 
|  |  | 
|  | * Check if Go is already installed (via a different method) and update it in place or at least notify the user | 
|  | * Lots of testing. It's only had limited testing so far. | 
|  | * Add support for additional shells. | 
|  |  | 
|  | ## Development instructions | 
|  |  | 
|  | ### Testing | 
|  |  | 
|  | There are integration tests in [`main_test.go`](main_test.go). Please add more | 
|  | tests there. | 
|  |  | 
|  | #### On unix/linux with the Dockerfile | 
|  |  | 
|  | The Dockerfile automatically builds the binary, moves it to | 
|  | `/usr/local/bin/getgo` and then unsets `$GOPATH` and removes all `$GOPATH` from | 
|  | `$PATH`. | 
|  |  | 
|  | ```bash | 
|  | $ docker build --rm --force-rm -t getgo . | 
|  | ... | 
|  | $ docker run --rm -it getgo bash | 
|  | root@78425260fad0:~# getgo -v | 
|  | Welcome to the Go installer! | 
|  | Downloading Go version go1.8.3 to /usr/local/go | 
|  | This may take a bit of time... | 
|  | Adding "export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" to /root/.bashrc | 
|  | Downloaded! | 
|  | Setting up GOPATH | 
|  | Adding "export GOPATH=/root/go" to /root/.bashrc | 
|  | Adding "export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/root/go/bin" to /root/.bashrc | 
|  | GOPATH has been setup! | 
|  | root@78425260fad0:~# which go | 
|  | /usr/local/go/bin/go | 
|  | root@78425260fad0:~# echo $GOPATH | 
|  | /root/go | 
|  | root@78425260fad0:~# echo $PATH | 
|  | /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/root/go/bin | 
|  | ``` | 
|  |  | 
|  | ## Release instructions | 
|  |  | 
|  | To upload a new release of getgo, run `./make.bash && ./upload.bash`. |