Hi Eric,
there is currently no tool for Go that, like FindBugs, uses type and dataflow analysis to catch a wide variety of bug patterns. The vet tool comes closest; it uses types for some of its checks but is not flow-sensitive, and the number of checks it performs are relatively few and not customizable.
I think a FindBugs tool would be useful, but it is a substantial undertaking, and the Go community is perhaps more averse than the industry average to false positive reports from analysis tools, and is generally indisposed towards decorating source code with lemmas or annotations, though this may change as the community grows.
Let's look at each of the analyses you mention. In each case there is a trade-off to be made between solving each problem interprocedurally, which yields results that are more precise but often harder to explain to the user, and solving it locally, which yields fewer but simpler true positive reports.
#1 requires a program dependence graph (PDG) if it is to be solved interprocedurally; it can be done locally on the SSA form (see
golang.org/x/tools/go/ssa).
#3 is a typestate analysis. The "annotalysis" tools for detecting locking inconsistencies in C++ and Java programs are the best example of this approach, and require certain idioms (no bad thing for locking) and annotations of lemmas at function boundaries. You could build such a tool on top of the SSA representation.
#4 requires interprocedural dataflow analysis. Detecting whether nil is a legal receiver value is harder than it seems.
I hope that helps,
cheers
alan