2015-06-10 16:44:30 +00:00
#+TITLE : GO contribution layer for Spacemacs
[[file:img/go.png ]]
* Table of Contents :TOC@4:
- [[#description ][Description ]]
2015-09-17 17:44:59 +00:00
- [[#features ][Features: ]]
2015-06-10 16:44:30 +00:00
- [[#install ][Install ]]
2015-09-17 17:44:59 +00:00
- [[#pre-requisites ][Pre-requisites ]]
- [[#layer ][Layer ]]
2015-09-30 09:01:28 +00:00
- [[#configuration ][Configuration ]]
- [[#formatting ][Formatting ]]
2015-06-10 16:44:30 +00:00
- [[#working-with-go ][Working with Go ]]
2015-09-17 17:44:59 +00:00
- [[#go-commands-start-with-m ][Go commands (start with =m=): ]]
- [[#go-oracle ][Go Oracle ]]
2015-06-10 16:44:30 +00:00
* Description
This layer adds extensive support for go.
2015-06-10 21:16:01 +00:00
** Features:
2015-10-19 13:21:39 +00:00
- gofmt/goimports on file save
2015-09-30 09:37:59 +00:00
- Auto-completion using [[https://github.com/nsf/gocode/tree/master/emacs ][go-autocomplete ]] (with the =auto-completion= layer)
2015-06-10 16:44:30 +00:00
- Source analysis using [[http://golang.org/s/oracle-user-manual ][go-oracle ]]
* Install
** Pre-requisites
2015-08-02 07:41:48 +00:00
You will need =gocode= and =godef= :
2015-06-10 16:44:30 +00:00
#+BEGIN_SRC sh
2015-08-02 07:41:48 +00:00
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
2015-09-01 01:13:58 +00:00
go get -u -v golang.org/x/tools/cmd/oracle
2015-06-10 16:44:30 +00:00
#+END_SRC
2015-10-27 10:59:05 +00:00
Make sure that =gocode= executable is in your PATH. For information about
2015-10-29 12:41:05 +00:00
setting up =$PATH= , check out the corresponding section in the FAQ (~SPC f e h
$PATH RET~).
2015-06-10 16:44:30 +00:00
2015-09-30 09:37:59 +00:00
For best results, make sure that the =auto-completion= and =syntax-checking=
layers are enabled as well.
2015-06-10 16:44:30 +00:00
** Layer
To use this contribution add it to your =~/.spacemacs=
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers '(go))
#+END_SRC
2015-09-30 09:01:28 +00:00
* 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")
2015-10-19 13:21:39 +00:00
or
(go :variables gofmt-command "goimports")
2015-09-30 09:01:28 +00:00
#+end_src
2015-10-26 13:57:33 +00:00
#
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.
2015-09-30 09:01:28 +00:00
2015-06-10 16:44:30 +00:00
* Working with Go
** Go commands (start with =m=):
2015-10-26 13:57:33 +00:00
| 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) |
2015-06-10 16:44:30 +00:00
** Go Oracle
| Key Binding | Description |
|-------------+------------------------------------------------------------|
2015-08-17 18:25:48 +00:00
| ~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 |