2015-12-02 14:23:39 +00:00
|
|
|
#+TITLE: GO layer
|
2015-06-10 16:44:30 +00:00
|
|
|
|
|
|
|
[[file:img/go.png]]
|
|
|
|
|
2016-03-31 02:59:55 +00:00
|
|
|
* Table of Contents :TOC_4_gh:noexport:
|
|
|
|
- [[#description][Description]]
|
|
|
|
- [[#features][Features:]]
|
|
|
|
- [[#install][Install]]
|
|
|
|
- [[#pre-requisites][Pre-requisites]]
|
|
|
|
- [[#layer][Layer]]
|
|
|
|
- [[#configuration][Configuration]]
|
|
|
|
- [[#formatting][Formatting]]
|
2016-03-30 02:42:45 +00:00
|
|
|
- [[#indentation][Indentation]]
|
2016-04-05 02:36:51 +00:00
|
|
|
- [[#tests][Tests]]
|
2016-03-31 02:59:55 +00:00
|
|
|
- [[#working-with-go][Working with Go]]
|
|
|
|
- [[#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-12-03 21:17:34 +00:00
|
|
|
go get -u -v golang.org/x/tools/cmd/gorename
|
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-12-21 13:50:36 +00:00
|
|
|
setting up =$PATH=, check out the corresponding section in the FAQ (~SPC h SPC
|
2015-10-29 12:41:05 +00:00
|
|
|
$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
|
2016-01-06 05:21:55 +00:00
|
|
|
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
|
|
|
|
add =go= to the existing =dotspacemacs-configuration-layers= list in this
|
|
|
|
file.
|
2015-06-10 16:44:30 +00:00
|
|
|
|
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-30 11:20:58 +00:00
|
|
|
#+end_src
|
|
|
|
|
|
|
|
or
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
2015-10-19 13:21:39 +00:00
|
|
|
(go :variables gofmt-command "goimports")
|
2015-09-30 09:01:28 +00:00
|
|
|
#+end_src
|
|
|
|
|
2016-03-30 02:42:45 +00:00
|
|
|
** Indentation
|
2016-04-05 10:22:32 +00:00
|
|
|
By default, the tab width in Go mode is 8 spaces. To use a different value set
|
|
|
|
the layer variable =go-tab-width=, e.g.
|
2016-03-30 02:42:45 +00:00
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
(go :variables go-tab-width 4)
|
|
|
|
#+end_src
|
|
|
|
|
2016-04-05 02:36:51 +00:00
|
|
|
** Tests
|
2015-10-30 11:20:58 +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-06-10 16:44:30 +00:00
|
|
|
|
2015-10-30 11:20:58 +00:00
|
|
|
* Working with Go
|
2015-06-10 16:44:30 +00:00
|
|
|
** Go commands (start with =m=):
|
2015-10-30 11:20:58 +00:00
|
|
|
|
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 |
|