--- /dev/null
+#!/bin/bash
+# Copyright (C) 2019 Ian Kelling
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+# usage: no args, run to install latest go.
+
+if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi
+
+shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4
+source /a/bin/errhandle/err
+
+m() { printf "$pre %s\n" "$*"; "$@"; }
+e() { printf "$pre %s\n" "$*"; }
+err() { echo "[$(date +'%Y-%m-%d %H:%M:%S%z')]: $0: $*" >&2; }
+
+m cd /a/opt/go.git
+m git fetch
+vers=($(git tag | sort -Vr | grep -E '^go[0-9.]+$' | head))
+
+ver=${vers[0]}
+dl() {
+ arch=$(dpkg --print-architecture)
+ f=${ver}.linux-${arch}.tar.gz
+
+ if [[ -e $f ]]; then
+ timestamp=$(stat -c %Y $f)
+ else
+ timestamp=0
+ fi
+ m wget -N https://dl.google.com/go/$f || ret=$?
+}
+dl
+# 8 is return code for 404. for a new release, they might not have a binary out yet
+if [[ $ret == 8 ]]; then
+ ver=${vers[1]}
+ dl
+fi
+
+new_timestamp=$(stat -c %Y $f)
+if [[ $timestamp != $new_timestamp || ! -e /usr/local/go/bin/go ]]; then
+ m sudo rm -rf /usr/local/go
+ m sudo tar -C /usr/local -xzf $f
+fi
+
+shopt -s nullglob
+for x in go*.tar.gz; do
+ if [[ $x == $f ]]; then continue; fi
+ rm -fv $x
+done
+
+go get -u mvdan.cc/fdroidcl