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 Definition
( F12
)しても関数の定義に飛びます。
また、カーソルがあたっている位置の関数や変数で Find All Reference
( bashift+F12
) すれば、使われている位置がリストされます。