go --help
https://godoc.org/golang.org/x/tools/cmd
参考: http://dominik.honnef.co/posts/2014/12/an_incomplete_list_of_go_tools/
$HOME/dev
$HOME
を $GOPATH
にする派もある$GOPATH/bin
を $PATH
に加えておくと便利$GOPATH
以下に作る
ghq get
するのも良いhttps://github.com/motemen/ghq
$GOPATH
=$HOME
にする過激設定について$GOPATH
爆発問題調子に乗って色々なリポジトリをcloneしてると goimports
が重くなる(後述)
go fmt
と自動importをやってくれるめっちゃ便利なやつ:GoImports
で実行可能:GoImports
とかするのも限界…手元でテストを走らせるときに事前に goimports
をかける
lazy-goimports
を実行go test
実行前に bundle-goimports を実行go fmt
/goimports
かけるの前提公式のソースコード検査ツール
% go tool vet -all .
lintツール。golangコア開発者のbradfitz作。
https://github.com/golang/lint
% go get -u github.com/golang/lint/golint
% golint ./...
golintが何らかの出力を出してたらエラーにする。
#/bin/sh
rm -f .golint.txt
golint ./... | tee .golint.txt
test ! -s .golint.txt
マルチプラットフォームで確認したい場合。
#/bin/sh
rm -f .golint.txt
for os in "linux" "darwin" "freebsd" "windows"; do
GOOS=$os golint ./... | tee -a .golint.txt
done
test ! -s .golint.txt
go tool vet
/golint
でエラーが出たらレッドにするその幻想をぶち殺す!!
ソースコード内のちょっとした分岐に
if runtime.GOOS == "windows" {
...
}
hoge(_{$GOOS})?(_{$GOARCH)?.go
ソースコード内にビルドタグを記述
// +build windows
// +build !windows
*_test.go ファイル内の TestXXX という関数がテストケースになる。
pakcage my
import "testing"
func TestHoge(t *testing.T) {
if false {
t.Errorf("test failed")
}
}
これを go test
で実行
https://github.com/stretchr/testify
gotestcover -covermode=count -coverprofile=.profile.cov -parallelpackages=4 ./...
goveralls -coverprofile=.profile.cov
git submodule
が無難か$GOROOT_BOOTSTRAP
の設定とかはしたリクエストをこぼさないようにする
サーバーの状態をお手軽にモニタリングできるAPIエンドポイントを作成できる
import (
"net/http"
"log"
"github.com/fukata/golang-stats-api-handler"
)
func main() {
http.HandleFunc("/api/stats", stats_api.Handler)
log.Fatal( http.ListenAndServe(":8080", nil) )
}
golang-stats-api-handlerを利用している場合に簡単にMackerelで可視化可能に。
https://github.com/mackerelio/mackerel-agent-plugins/pull/146
もう少し調整してから公式提供予定。
Goでの開発開始から運用に至るまでのノウハウを駆け足でお話しました