Visual Studio CodeでGo言語の開発環境を作成する

2022-04-20

Go言語はGoogleが開発・公開しているプログラミング言語の 1 つです。
コード記述の簡潔さ・理解しやすさと、プログラム実行速度やリソース効率の両立を目指しています。
この記事ではGo開発環境の設定から使い方までを記載します。

Goのインストール・設定

asdf を利用します。
asdf については以下の記事を参照してください。

$ xcode-select --install # Mac の場合はとりあえずやっておく
$ asdf plugin add golang
$ asdf list-all golang
...
1.17.8
$ asdf install golang 1.17.8
$ asdf global golang 1.17.8
$ go version
go version go1.17.8 darwin/amd64

環境変数の設定

Go 言語の環境変数には以下があります。

  • GOROOT
    • go のバイナリのホームまでのパス
    • go env GOROOT で値確認
  • GOPATH
    • go env GOPATH で値確認
    • go の各種資材が配置パスであってプロジェクトのパスでないことに注意
    • プロジェクトのパスは $GOPATH/src/github.com/<Githubアカウント名>/<プロジェクト名>
      • ただし、後述する GOPATH mode の場合
  • GOOS
    • コンパイルして作成するバイナリの対象 OS を指定する
  • GOARCH
    • コンパイルして作成するバイナリの対象 CPU を指定する

お好みのプロファイル( zsh の場合は .zshrc 、 bash の場合は .bash_profile など )に以下を追記します。

export GOPATH=`go env GOPATH`
export PATH=$PATH:$GOPATH/bin
export GO111MODULE=on

個人的には不要ですが、 GOROOT を含める場合は以下です。

export GOROOT=`go env GOROOT`
export GOPATH=`go env GOPATH`
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

以下のコマンドでプロファイルの変更を反映させましょう。

$ exec $SHELL -l

また、 $GOPATH 以下のディレクトリ構造は以下のようになる。

依存関係管理ツール Go Modules

Go Modules については以下の記事を参照してください。

VS Code の設定

VS Code には Go の各種ツールと連携する拡張機能があり、 VS Code 内ターミナルから以下のようにコマンドラインツールを導入することにより自動で拡張機能インストールの案内をしてくれます。
Go の拡張機能をインストールしてから、VSCode でコマンドパレット( Cmd+Shift+P )を開いて GO: Install/Update tools で検索した後、全チェックしてインストールしてもいいし、以下で 1 つずつ入れても大丈夫です。

  • goimports
    • 過不足のimportの自動補完
    • go get golang.org/x/tools/cmd/goimports
  • gocode
    • ヘルパー機能
    • go get -u -v github.com/nsf/gocode
  • godef
    • 呼び出し関数へのジャンプなど
    • go get -u -v github.com/rogpeppe/godef
  • gogetdoc
    • go get -u -v github.com/zmb3/gogetdoc
  • golint
    • lint
    • go get -u -v golang.org/x/lint/golint
  • go-outline
    • go get -u -v github.com/lukehoban/go-outline
  • goreturns
    • go get -u -v sourcegraph.com/sqs/goreturns
  • gorename
    • go get -u -v golang.org/x/tools/cmd/gorename
  • gopkgs
    • go get -u -v github.com/tpng/gopkgs
  • go-symbols
    • go get -u -v github.com/newhook/go-symbols
  • guru
    • go get -u -v golang.org/x/tools/cmd/guru
  • gotests
    • go get -u -v github.com/cweill/gotests/...

.editorconfig

.editorconfig のおすすめの設定を記載します。

root = true

[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = false
charset = utf-8
indent_style = space
indent_size = 2

[{Makefile,go.mod,go.sum,*.go}]
indent_style = tab
indent_size = 4
trim_trailing_whitespace = true

デバッグ環境作成

デバッガとして Delve を導入します。

  • デバッガツール delve のインストール
    • go get -u github.com/derekparker/delve/cmd/dlv
  • VSCodeにGo言語の拡張機能をインストール
    • Rich Go language support for Visual Studio Code

コードにブレークポイントを設定して、 VSCode の Debug から Start Debugging を実行します。( F5 でも大丈夫です)
以下を実行可能です。

  • 継続実行(Continue)
    • 次のブレークポイントに到達するまで処理を継続させる
  • ステップオーバー(Step Over)
    • 見えているソースコードの次の行に移動する。 カーソル位置の関数の中は実行され、終了するところまで処理が進む
  • ステップイン(Step Into)
    • 関数呼び出しの中に飛び込む。下のレイヤーに降り ていくときに使う
  • ステップアウト(Step Out)
    • いま実行している関数が終了するところまで処理 を進める
  • 再スタート(Restart)
    • 一度終了して再度実行を開始する
  • 停止(Stop)
    • 一度終了する

例えば fmt.Println() をステップインして細かいところを見ていきましょう。
syscall.Write() などでシステムコールされているのがわかります。( Win だと別コード)
今回はデバッガのステップインでコードを掘っていきましたが、カーソルがあたっている位置の関数で Go to DefinitionF12 )しても関数の定義に飛びます。
また、カーソルがあたっている位置の関数や変数で Find All Referencebashift+F12 ) すれば、使われている位置がリストされます。

おすすめ書籍

おすすめ記事