Last Updated: March 02, 2016
· ihcsim

Golang - All Known Implementations of An Interface In VIM

For all you vim junkies out there, vim-go supports advance code analysis using the :GoImplements, :GoCallees, :GoChannelPeers, :GoReferrers etc. oracle commands.

For example, if I have a Calculator interface and implementation that looks like:

type Arithmetic interface{
  add(float64, float64) float64 

type Calculator struct{}

func (c *calculator) add(o1, o2 float64) float64 {
  // ... stuff

Then running :GoImplements in vim with my cursor on the type Arithmetic interface will yield something like:

calculator.go|8 col 6| interface type Arithmetic
calculator.go|3 col 6| is implemented by pointer type *calculator

Now if I moved my cursor to the type Calculator struct{} line and run :GoImplements, I will get something like:

calculator.go|3 col 6| pointer type *calculator
calculator.go|8 col 6| implements Arithmetic

Note: If you got an "unknown command" error, try execute :GoInstallBinaries before re-trying.