こんなシェル関数を.bashrcなりに設定して読み込んで使えばOK
function go-get {
local opts=" "
local pkg=""
while true
do
if (( $# > 1 ))
then
opts="${opts}${1} "
shift
elif (( $# == 1 ))
then
pkg=${1}
shift
else
break
fi
done
cmd="go get${opts}$(curl -Ls -o /dev/null -w %{url_effective} https://${pkg} | sed -e 's/https:\/\///g')"
echo ${cmd}
eval ${cmd}
}
curlの処理は
-
-L
でリダイレクトを追跡 - 取得結果は不要なので、
-o /dev/null
で捨てて、 -
-w %{url_effective}
の部分でリダイレクト先のURL表示を指定
という事をしている。このcurlの処理結果が https://<指定したパッケージ>
という文字列になるので、この文字列からsed等でhttps://
を除去すれば新パッケージが取得できる。
使用例
github.com/go-delve/delve は旧パッケージパスが github.com/derekparker/delve
だった。ブラウザでアクセスしたらリダイレクトしてくれるが、go get
で旧パッケージパスを指定するとエラーになる
$ go get -u github.com/derekparker/delve
can't load package: package github.com/derekparker/delve (以下略
上記シェル関数を使った場合、その新パッケージに差し替えてgo getする ※オプションやパッケージの指定の仕方はgo get
と同じでOK
$ go-get -u github.com/derekparker/delve
go get -u github.com/go-delve/delve
: (以下略