2017-06-14 13:41:14 -06:00
<!-- {
"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
2017-07-20 19:16:03 -06:00
that make Go development more productive and seamless.
A comprehensive list of editor support and IDEs for Go development is available at
2017-06-14 13:41:14 -06:00
< 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 >
2017-07-25 14:03:48 -06:00
< 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 >
2017-11-21 18:10:59 -07:00
< 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 >
2017-07-25 14:03:48 -06:00
< li > < a href = "https://atom.io/packages/go-plus" > Atom< / a > : Go-Plus is an Atom package that provides enhanced Go support< / li >
2017-06-14 13:41:14 -06:00
< / ul >
< p >
2017-07-20 19:16:03 -06:00
Note that these are only a few top solutions; a more comphensive
community-maintained list of
2017-06-14 13:41:14 -06:00
< a href = "https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins" > IDEs and text editor plugins< / a >
2017-07-20 19:16:03 -06:00
is available at the Wiki.
2017-06-14 13:41:14 -06:00
< / p >
< p >
2017-07-20 19:16:03 -06:00
Each development environment integrates a number of Go-specific tools.
2017-06-14 13:41:14 -06:00
The following feature matrix lists and compares the most significant features.
< / p >
< table class = "features-matrix" >
< tr >
< th > < / th >
2017-07-25 14:03:48 -06:00
< 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 >
2017-11-21 18:10:59 -07:00
< th > < img title = "GoLand" src = "/doc/editors/goland.png" > < br > GoLand< / th >
2017-07-25 14:03:48 -06:00
< th > < img title = "Go-Plus" src = "/doc/editors/go-plus.png" > < br > Atom< / th >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
2017-07-25 12:08:47 -06:00
< td class = "feature-row" colspan = "5" > Editing features< / td >
2017-06-14 13:41:14 -06:00
< / 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 >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
< td > Autocompletion of identifers (variable, method, and function names)< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
2017-08-04 13:59:55 -06:00
< td > Type-aware autocompletion< / td >
2017-06-14 13:41:14 -06:00
< td class = "no" > No< / td >
< td class = "no" > No< / td >
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "no" > No< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
< td > Rename identifiers< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / 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 >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / 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 >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / 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 >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
2017-07-25 12:08:47 -06:00
< td class = "feature-row" colspan = "5" > Navigation features< / td >
2017-06-14 13:41:14 -06:00
< / 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 >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / 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 >
2017-07-24 17:05:43 -06:00
< td class = "yes" > No< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
< td > Jump to definition and referees< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
< td > Look up for interface implementations< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
< td > Search for callers and callees< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
2017-07-25 12:08:47 -06:00
< td class = "feature-row" colspan = "5" > Testing and debugging features< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
< td > Debugger support< / td >
< td class = "no" > No< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< sup > 3< / sup > < / td >
2017-06-14 13:41:14 -06:00
< / 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 >
2017-07-24 17:05:43 -06:00
< td class = "no" > No< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
< td > Auto generate tests for packages, files and identifiers< / td >
< td class = "no" > No< / td >
< td class = "yes" > Yes< / td >
2017-11-21 18:10:59 -07:00
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "no" > No< / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
< td > Debug tests< / td >
< td class = "no" > No< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< sup > 3< / sup > < / td >
2017-06-14 13:41:14 -06:00
< / tr >
< tr >
< td > Display test coverage< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
< td class = "yes" > Yes< / td >
2017-07-24 17:05:43 -06:00
< td class = "yes" > Yes< / td >
2017-06-14 13:41:14 -06:00
< / 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 >
2017-07-24 17:05:43 -06:00
< td > < a href = "https://atom.io/packages/go-plus" > Install< / a > < / td >
2017-06-14 13:41:14 -06:00
< / tr >
< / table >
< p >
2017-07-25 12:08:47 -06:00
< 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.
2017-06-14 13:41:14 -06:00
< br >
2017-07-25 12:08:47 -06:00
< sup > 2< / sup > Additionally, user input can disambiguate when two or more options are available.
2017-07-24 17:05:43 -06:00
< br >
2017-07-25 12:08:47 -06:00
< sup > 3< / sup > Available if the < a href = "https://atom.io/packages/go-debug" > go-debug< / a > package is installed.
2017-06-14 13:41:14 -06:00
< / 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;
}
2017-07-25 12:08:47 -06:00
< / style >