Go言語(go, golang)をインストールすることなく、Go言語の開発環境を構築する方法です。
簡単に言うと、使い捨ての Docker コンテナ上で go コマンドを実行します。
golang インストールは不要ですが、基本的に GOPATH=~/go
以下にプロジェクトのソースディレクトリがある事を前提とします。
※ Docker を利用するので Docker のインストールは必要です。
動作確認環境: macOS Catalina 10.15.8
Atom + go-plus で開発していますが、保存時のテスト実行等も問題なく動作しているようです。
サンプルは go mod init ${PWD:$(echo “$GPATH/src”|wc -c)}
を実行する例です。
プライベートリポジトリなしの場合
docker run --rm -v "$PWD":"${PWD:$#HOME}" -w "${PWD:$#HOME}" golang:1.14.12 go mod init ${PWD:$(echo “$GPATH/src”|wc -c)}
プライベートリポジトリを含む場合
プライベートリポジトリが https://private-repo
の場合に対応しています。
docker run —rm -v "$HOME/.ssh":"/root/.ssh":ro -v “$PWD”:”${PWD:$#HOME}” -w “${PWD:$#HOME}” --env GOPRIVATE="private-repo" golang:1.14.12 /bin/sh -c "git config --global url.ssh://git@private-repo.insteadOf https://private-repo && go mod init ${PWD:$(echo “$GPATH/src”|wc -c)}"
git config
で特定のリポジトリに対して go get
を ssh 接続に切り替えるため、コンテナで go
コマンドを含む複数コマンド実行が必要なので、/bin/sh
の -c
オプションを利用しています。
エイリアスを登録して利用
1行で書けますが非常に長いので、実際に利用する時は関数を用意してエイリアスを登録して利用しています。
alias go='golang'
alias goinit='golang mod init ${PWD:$(echo “$GPATH/src”|wc -c)}"'
golang() {
USE_PRIVATE_REPO="git config --global url.ssh://git@private-repo.insteadOf https://private-repo"
WORKDIR=$(echo "${PWD}" | awk '{print substr($0, index($0, "/go/"))}')
docker run --rm \
-v "${HOME}/.ssh":"/root/.ssh":ro \
-v "${PWD}":"${WORKDIR}" \
-w "${WORKDIR}" \
--env GOPRIVATE="private-repo" \
golang:1.14.12 /bin/sh -c "${USE_PRIVATE_REPO} && go $*"
}
source ~/.zshrc