| <!--{ |
| "Title": "Editor plugins and IDEs", |
| "Template": true |
| }--> |
| |
| <h2 id="introduction">Introduction</h2> |
| |
| <p> |
| This document lists commonly used editor plugins and IDEs from the Go ecosystem |
| that make Go development more productive and seamless. |
| A comprehensive list of editor support and IDEs for Go development is available at |
| <a href="http://golang.org/wiki/IDEsAndTextEditorPlugins">the wiki</a>. |
| </p> |
| |
| <h2 id="options">Options</h2> |
| <p> |
| The Go ecosystem provides a variety of editor plugins and IDEs to enhance your day-to-day |
| editing, navigation, testing, and debugging experience. |
| </p> |
| |
| <ul> |
| <li><a href="https://github.com/fatih/vim-go">vim</a>: vim-go plugin provides Go programming language support</li> |
| <li><a href="https://marketplace.visualstudio.com/items?itemName=lukehoban.Go">Visual Studio Code</a>: |
| Go extension provides support for the Go programming language</li> |
| <li><a href="https://www.jetbrains.com/go">GoLand</a>: GoLand is distributed either as a standalone IDE |
| or as a plugin for IntelliJ IDEA Ultimate</li> |
| <li><a href="https://atom.io/packages/go-plus">Atom</a>: Go-Plus is an Atom package that provides enhanced Go support</li> |
| </ul> |
| |
| <p> |
| Note that these are only a few top solutions; a more comphensive |
| community-maintained list of |
| <a href="https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins">IDEs and text editor plugins</a> |
| is available at the Wiki. |
| </p> |
| |
| <p> |
| Each development environment integrates a number of Go-specific tools. |
| The following feature matrix lists and compares the most significant features. |
| </p> |
| |
| <table class="features-matrix"> |
| <tr> |
| <th></th> |
| <th><img title="Vim Go" src="/doc/editors/vimgo.png"><br>vim</th> |
| <th><img title="Visual Studio Code" src="/doc/editors/vscodego.png"><br>Visual Studio Code</th> |
| <th><img title="GoLand" src="/doc/editors/goland.png"><br>GoLand</th> |
| <th><img title="Go-Plus" src="/doc/editors/go-plus.png"><br>Atom</th> |
| </tr> |
| <tr> |
| <td class="feature-row" colspan="5">Editing features</td> |
| </tr> |
| <tr> |
| <td>Build and run from the editor/IDE</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td>Autocompletion of identifiers (variable, method, and function names)</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td>Type-aware autocompletion</td> |
| <td class="no">No</td> |
| <td class="no">No</td> |
| <td class="yes">Yes</td> |
| <td class="no">No</td> |
| </tr> |
| <tr> |
| <td>Rename identifiers</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td>Auto format, build, vet, and lint on save</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes<sup>1</sup></td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td>Auto insert import paths and remove unused on save</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes<sup>2</sup></td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td>Auto generate JSON, XML tags for struct fields</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td class="feature-row" colspan="5">Navigation features</td> |
| </tr> |
| <tr> |
| <td>Display documentation inline, or open godoc in browser</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td>Switch between <code>*.go</code> and <code>*_test.go</code> file</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">No</td> |
| </tr> |
| <tr> |
| <td>Jump to definition and referees</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td>Look up for interface implementations</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td>Search for callers and callees</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr> |
| <td class="feature-row" colspan="5">Testing and debugging features</td> |
| </tr> |
| <tr> |
| <td>Debugger support</td> |
| <td class="no">No</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes<sup>3</sup></td> |
| |
| </tr> |
| <tr> |
| <td>Run a single test case, all tests from file, or all tests from a package</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="no">No</td> |
| </tr> |
| <tr> |
| <td>Auto generate tests for packages, files and identifiers</td> |
| <td class="no">No</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="no">No</td> |
| </tr> |
| <tr> |
| <td>Debug tests</td> |
| <td class="no">No</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes<sup>3</sup></td> |
| </tr> |
| <tr> |
| <td>Display test coverage</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| <td class="yes">Yes</td> |
| </tr> |
| <tr class="download"> |
| <td></td> |
| <td><a href="https://github.com/fatih/vim-go">Install</a></td> |
| <td><a href="https://marketplace.visualstudio.com/items?itemName=lukehoban.Go">Install</a></td> |
| <td><a href="https://www.jetbrains.com/go">Install</a></td> |
| <td><a href="https://atom.io/packages/go-plus">Install</a></td> |
| </tr> |
| </table> |
| |
| <p> |
| <sup>1</sup>Possible when enabled via Settings > Go > On Save, <code>go</code> <code>vet</code> and <code>golint</code> are available via plugins. Also runs tests on save if configured. |
| <br> |
| <sup>2</sup>Additionally, user input can disambiguate when two or more options are available. |
| <br> |
| <sup>3</sup>Available if the <a href="https://atom.io/packages/go-debug">go-debug</a> package is installed. |
| </p> |
| |
| </div> |
| |
| <style> |
| .features-matrix { |
| min-width: 800px; |
| border-collapse: collapse; |
| } |
| .features-matrix th { |
| width: 60px; |
| text-align: center; |
| font-size: 14px; |
| color: #666; |
| } |
| .features-matrix th img { |
| width: 48px; |
| } |
| .features-matrix .yes { |
| text-align: center; |
| } |
| .features-matrix .no { |
| text-align: center; |
| background-color: #ffe9e9; |
| } |
| .features-matrix .download { |
| font-weight: bold; |
| text-align: center; |
| } |
| .features-matrix td { |
| padding: 11px 5px 11px 5px; |
| border-bottom: solid 1px #ebebeb; |
| } |
| .features-matrix .feature-row { |
| background-color: #ebebeb; |
| font-weight: bold; |
| } |
| </style> |