
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での開発開始から運用に至るまでのノウハウを駆け足でお話しました