Goを始めるにあたって
やっておいた方が良さそうな事をまとめた。
定番的なパッケージをインストール
# 対話式シェルサポート
go get github.com/motmen/gore/cmd/gore
# goreの進化発揮させるためにインストールする
go get github.com/mdempsky/gocode
go get github.com/k0kubun/pp
ghqのインストール
ghq
は階層構造でソースコードリポジトリを取得、管理するためのツールをインストール
brew install ghq
# 全てのソースコードリポジトリを`$GOPATH/src`に配置するための設定
git config --global ghq.root $GOPATH/src
# これで見えるようになる
ghq list
# gogetではなくghq getを使ってダウンロード可能
pecoのインストール
リポジトリ間の移動を簡単にする。
ソースコードのリポジトリ管理は一元管理出来るとうになったらが、$GOPATH/src
配下の階層が深くなってしまうので移動が面倒。
ここでpecoを使用する。pecoはターミナル上で標準入力をインクリメンタルにフィルタするUIを定常するツール。
brew install peco
fish shellを使ってるので以下を使用。
Fish, ghq, peco導入 – Qiita
Control + Gでリポジトリのフィルタリングが可能となる。
goの開発支援用のツールを探索
Toolsをごっそりgo get
する。...
はgoのワイルドカード、指定配下をサブディレクトリを含む全てのパッケージディレクトリにマッチする。
go get golang.org/x/tools/cmd/…
gofmt(コードフォーマッター)
gofmt -w <target source>
goimports ~ コードフォーマッター + imports文補助
Gofmtの上位互換のようなツール。
コードフォーマットとパッケージを読み込むimport文の挿入を削除を自動で行う。
goimports -w <target source>
Goimportsを高速化するためのdragon-imports
というツールもある。
lintルール go vetとgolint
コードの静的解析を行って以下のような点を指摘してくれる。
- コード上でバグが発生しそうな部分
- スタイルがふぞろいな点
- Goらしくない書き方
Golintのインストール
go get golang.org/x/lint/golint
Go vetのファイル指定、ディレクトリ指定、階層指定
あまり時間がかからないので常に./...
で階層指定でも問題ないかも…
go vet main.go
go vet .
go vet ./…
go vetとgolintを実行する。
go vet ./...; golint ./...
# 実行するとこのように警告が出力される
main.go:1:1: don't use an underscore in package name
main.go:11:5: var projectId should be projectID
main.go:13:6: exported type PubSubMessage should have comment or be unexported
main.go:17:6: exported type PayLoad should have comment or be unexported
main.go:23:1: exported function InstanceSwitcher should have comment or be unexported
※go vetが出力した警告は必ず直す必要がある。
go docの使い方
インストール
go get golang.org/x/tools/cmd/godoc
# fmtパッケージのドキュメントを表示
go doc -all fmt
# 外部パッケージも表示可能
go doc -all github.com/motemen/gore
# ghqとpecoを併用する(fish)
go doc -all (ghq list | peco) | less
# godocを動かす、以下を実施後→にアクセス([The Go Programming Language](http://localhost:6060/))
godoc
他
- gorename
- 変数名や関数名をリネームするツール
- guru
- ソースコードの静的解析をするツール
- gopls
- 公式のGoのLSP(Language Server Protocol)
- gocode
- コード補完用のエンジンを提供するツール
- godef
- 定義ジャンプを行うためのツール
- gotags
- ctag五感のタグを生成するツール、Goのソースコードの静的解析用のパッケージ群。
独自の静的解析ツールを作成する際に便利とのこと。 - 社内のコーディング規約に則るためのlintツールを作るなど
- ctag五感のタグを生成するツール、Goのソースコードの静的解析用のパッケージ群。
- analysis