# 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)
- [Pre-requisites](#pre-requisites)
- [Layer](#layer)
- [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 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
### Pre-requisites
You will need gocode:
```
go get -u github.com/nsf/gocode
```
Make sure that `gocode` executable is in your PATH.
### 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