Skip to content

Instantly share code, notes, and snippets.

@wshearn
Last active February 14, 2020 15:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wshearn/79f94801c26493da32924f4049b9e93d to your computer and use it in GitHub Desktop.
Save wshearn/79f94801c26493da32924f4049b9e93d to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -e
usage()
{
echo "GVM is a simple golang version manager written in bash."
echo "$(basename $0) -v <version>"
}
setversion()
{
if [[ -z ${WANTED} ]]; then
usage
exit 1
fi
go version 2&>1 > /dev/null || bootstrap
if [[ ! -d ${HOME}/sdk/go${WANTED} ]]; then
go get golang.org/dl/go${WANTED}
go${WANTED} download
fi
pushd ${HOME}/sdk > /dev/null
rm -f active
ln -s go${WANTED} active
popd > /dev/null
}
bootstrap()
{
os=$(uname)
arch="386"
case ${os} in
Darwin)
arch="amd64"
;;
Linux)
# TODO: armv6l support
if [[ "$(uname -m)" == "x86_64" ]]; then
arch="amd64"
fi
;;
esac
mkdir -p ${HOME}/sdk
pushd ${HOME}/sdk > /dev/null
curl -o go.tar.gz https://dl.google.com/go/go${WANTED}.${os}-${arch}.tar.gz
tar xf go.tar.gz
mv go go${WANTED}
rm -f go.tar.gz
popd > /dev/null
}
while getopts ":v:h" opt; do
case ${opt} in
h)
usage
exit 0
;;
v)
WANTED=${OPTARG}
setversion
;;
esac
done
if [[ ${PATH} != *"${HOME}/sdk/active/bin"* ]]; then
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "Runtime set, add it to your path"
echo "export PATH=\${PATH}:\${HOME}/sdk/active/bin"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment