I’m reading Learning Go by Jon Bodner. The opening chapters have some nice tips on getting a good developer environment. Vim has the excellent vim-go plugin that bundles a ton of nice stuff. Here are some notes I took while I got things setup.
My .vimrc is here.
My detailed notes from reading the book are here, and what follows below is just the subset that deals with dev environment.
Vi
Install vim-go: it comes with a massive set of tools.
goimports
goimports for some neat stuff that gofmt doesn’t do. Install with:
go install golang.org/x/tools/cmd/goimports@latest
And run with:
goimports -l -w .
Vi: Just save it.
Linting with golint
Install: go install golang.org/x/lint/golint@latest
Run: golint ./...
Vi: :GoLint
SA with govet
Run: go vet ./...
Vi: :GoVet
This does not catch subtle bugs around shadow variables. So consider installing shadow
as well:
Install: go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow@latest
Run: shadow ./...
Combine golint, govet with golangci-lint
This tool runs 10 different linters by default and support dozens others.
Install: see official docs
Run: golangci-lint run
vim-go notes
- Code completion is with
Ctrl-x Ctrl-o
:Tagbar
is bound toF8
:GoDef
is bound togd
- :
GoDefStack
shows you how deep you’ve jumped,GoDefPop
orCtrl-T
just pops to the last hop
Sample makefile
.DEFAULT_GOAL := build
fmt:
go fmt ./...
.PHONY:fmt
lint: fmt
golint ./...
.PHONY:lint
vet: fmt
go vet ./...
shadow ./...
.PHONY:vet
build: vet
go build hello.go
.PHONY:build