# go contribution layer for Spacemacs
![go](img/go.png)
**Table of Contents**
- [go contribution layer for Spacemacs](#go-contribution-layer-for-spacemacs)
- [Description](#description)
- [Install](#install)
- [Layer](#layer)
- [Working with Go](#working-with-go)
## Description
This layers adds extensive support for go.
Features:
- gofmt on file save
- Auto-completion using [go-autocomplete](https://github.com/nsf/gocode/tree/master/emacs)
- Source analysis using [go-oracle](http://golang.org/s/oracle-user-manual)
## Install
### Layer
To use this contribution add it to your `~/.spacemacs`
```elisp
(setq-default dotspacemacs-configuration-layers '(go))
```
## Working with Go
### Go commands (start with `m`):
Key Binding | Description
---------------------------|------------------------------------------------------------
SPC m d p | godoc at point
SPC m i g | goto imports
SPC m i a | add import
SPC m i r | remove unused import
SPC m p b | go-play buffer
SPC m p r | go-play region
SPC m p d | download go-play snippet
SPC m t p | run "go test" for the current package
SPC m g | go jump to definition
### Go Oracle
Key Binding | Description
---------------------------|------------------------------------------------------------
SPC m o o | go-oracle set analysis scope
SPC m o < | go-oracle show possible callers
SPC m o > | go-oracle show call targets
SPC m o c | go-oracle show channel sends/receives
SPC m o d | go-oracle show definition
SPC m o f | go-oracle show free variables
SPC m o g | go-oracle show callgraph
SPC m o i | go-oracle show implements relation
SPC m o p | go-oracle show what the select expression points to
SPC m o r | go-oracle show all references to object
SPC m o s | go-oracle show callstack
SPC m o t | go-oracle describe selected syntax, kind, type and methods