Recently, I've been programming more and more in the 
Go programming language. Since my editor of choice has been vim for the last 10 years or so, I use vim to edit my Go code, as well. Of course, when I'm programming, I want my editor to support me in useful ways without standing in my way. So I took a look how I could improve my vim configuration to do exactly that.
The first stop is in the 
Go source tree itself. It provides vim plugins for syntax highlighting, indentation and an integration with godoc. This is a start, but we can go a lot further.
If you want auto-completion for functions, methods, constants, etc., then 
gocode is for you. After installation (I recommend installation via 
pathogen), you can use auto-completion from vim by pressing Ctrl-X Ctrl-O.
But with auto-completion, we can go even further: with 
snipmate, you have a number of things like if, switch, for loops that you can auto-complete by e.g. typing "if" and pressing the tab key. You can then continue pressing tab to fill out the remaining parts.
Another feature that I wanted to have as well was an automatic syntax check. For this task, you can use 
syntastic. But better configure it to passive mode and activate the active mode only for Go, otherwise other filetypes are affected as well. syntastic will call 
gofmt -l when saving a Go source file and mark any syntax errors it finds. This is neat to immediately find minor syntax errors, and thanks to Go's fast parsing, it's a quick operation.
Last but not least, I also wanted to have some features that aren't specific to Go: first, a file tree (but only if I open vim with no specific file), and second, an integration with 
ack to search through my source files efficiently and directly from vim. As a file tree, I found 
nerdtree to be quite usable, and as ack integration, I used this simple configuration snippet:
function! Ack(args)
        let grepprg_back=&grepprg
        set grepprg=ack\ -H\ --nocolor\ --nogroup
        execute "silent! grep " . a:args
        botright copen
        let &grepprg=grepprg_back
endfunction
command! -nargs=* -complete=file Ack call Ack()
For my complete vim configuration, just 
take a look at it in my dotfiles repository. Enjoy!
