#+TITLE: GO contribution layer for Spacemacs [[file:img/go.png]] * Table of Contents :TOC_4_org:noexport: - [[Description][Description]] - [[Features:][Features:]] - [[Install][Install]] - [[Pre-requisites][Pre-requisites]] - [[Layer][Layer]] - [[Configuration][Configuration]] - [[Formatting][Formatting]] - [[Working with Go][Working with Go]] - [[Go commands (start with =m=):][Go commands (start with =m=):]] - [[Go Oracle][Go Oracle]] * Description This layer adds extensive support for go. ** Features: - gofmt/goimports on file save - Auto-completion using [[https://github.com/nsf/gocode/tree/master/emacs][go-autocomplete]] (with the =auto-completion= layer) - Source analysis using [[http://golang.org/s/oracle-user-manual][go-oracle]] * Install ** Pre-requisites You will need =gocode= and =godef=: #+BEGIN_SRC sh go get -u -v github.com/nsf/gocode go get -u -v github.com/rogpeppe/godef go get -u -v golang.org/x/tools/cmd/oracle #+END_SRC Make sure that =gocode= executable is in your PATH. For information about setting up =$PATH=, check out the corresponding section in the FAQ (~SPC f e h $PATH RET~). For best results, make sure that the =auto-completion= and =syntax-checking= layers are enabled as well. ** Layer To use this contribution add it to your =~/.spacemacs= #+BEGIN_SRC emacs-lisp (setq-default dotspacemacs-configuration-layers '(go)) #+END_SRC * Configuration ** Formatting By default, go buffers are run through =gofmt= on save. To use a different formatter, set the value of =gofmt-command=, e.g. #+begin_src emacs-lisp (setq gofmt-command "goimports") #+end_src or #+begin_src emacs-lisp (go :variables gofmt-command "goimports") #+end_src If you're using =gocheck= in your project you can use the =go-use-gocheck-for-testing= variable to enable suite testing and to get single function testing to work. * Working with Go ** Go commands (start with =m=): | Key Binding | Description | |-------------+---------------------------------------------------------------------------------------| | ~SPC m h h~ | godoc at point | | ~SPC m i g~ | goto imports | | ~SPC m i a~ | add import | | ~SPC m i r~ | remove unused import | | ~SPC m e b~ | go-play buffer | | ~SPC m e r~ | go-play region | | ~SPC m e d~ | download go-play snippet | | ~SPC m x x~ | run "go run" for the current 'main' package | | ~SPC m g a~ | jump to matching test file or back from test to code file | | ~SPC m g g~ | go jump to definition | | ~SPC m r n~ | go rename | | ~SPC m t p~ | run "go test" for the current package | | ~SPC m t P~ | run "go test" for the current package and all packages under it | | ~SPC m t t~ | run "go test" for the function you're currently in (while you're in a _.test.go file) | | ~SPC m t s~ | run "go test" for the suite you're currently in (requires gocheck) | ** Go Oracle | Key Binding | Description | |-------------+------------------------------------------------------------| | ~SPC m r o~ | go-oracle set analysis scope | | ~SPC m r <~ | go-oracle show possible callers | | ~SPC m r >~ | go-oracle show call targets | | ~SPC m r c~ | go-oracle show channel sends/receives | | ~SPC m r d~ | go-oracle show definition | | ~SPC m r f~ | go-oracle show free variables | | ~SPC m r g~ | go-oracle show callgraph | | ~SPC m r i~ | go-oracle show implements relation | | ~SPC m r p~ | go-oracle show what the select expression points to | | ~SPC m r r~ | go-oracle show all references to object | | ~SPC m r s~ | go-oracle show callstack | | ~SPC m r t~ | go-oracle describe selected syntax, kind, type and methods |