Google’s Go language was recently chosen as Tiobe’s programming language of 2016, based on its rapid growth in popularity over the year, more than twice that of runners-up Dart and Perl. Tiobe’s language index is based on the “number of skilled engineers worldwide, courses, and third-party vendors,” using the results of multiple search engines.
That much growth in popularity carries with it an increased interest in development tools for the programming language. Because the Go language is distributed in open source form complete with compilers, tools, and libraries, what’s left for programmers to find for themselves is Go-aware editing environments, whether straight editors or integrated development environments (IDEs), hosted locally or in the cloud.
For this article I’ve attempted to look at all the available Go-aware editing environments and zero in on those that seem worthwhile. I started with the official list of IDEs and Plugins for Go and winnowed the roughly 35 items on the list down to the ones that might deserve a trial. I’ll start with a quick roundup of the useful products I found in each category and end with a close look at my top picks.
Note that Go language development typically relies on the GOPATH variable set to the root of your Go development workspace. That can be an issue for GUI applications such as editors, which don’t always honor the environment settings.
There are more than a dozen Go language tools that you can install in directories under the GOPATH folder with the
go get command, once Go itself is installed. Many of the editors I evaluated use one or more of these tools.
At the high end, Gogland from JetBrains features smart completions, inspections and quick fixes, simple refactoring, quick navigation, quick popups, some very basic code generation, recursive call detection, expression type popups, exit point highlighting, usage finding, code formatting, semantic highlighting, and parameter hints in its editor. Yes, that’s a lot of functionality for editing a young language. Other Gogland features include an integrated debugger, coverage analysis, test running, a menu for running Go tools, and some non-Go-specific functionality that is similar to what you’ll find in other JetBrains products, such as IntelliJ IDEA. Gogland can manage multiple GOPATH settings, rather than relying exclusively on the system GOPATH environment.
Gogland is currently available free as an early-access product. It will likely be priced along the lines of other JetBrains products eventually. Expect it to be available by annual subscription either by itself or in a bundle with the rest of JetBrains’ tools, with discounts for academics and open source contributors.
At a slightly lower level of complexity, Eclipse with goclipse provides syntax highlighting, automatic indentation, and outlining in its editor, all in the spirit of other Eclipse language modules such as Java. Integrations include debugging with GDB, definition finding with the guru and godef Go tools, and autocomplete with the gocode tool. Eclipse and the goclipse plugin are free and open source.
LiteIDE sports a package browser, class view and outline, document browser, code navigation, find usages, and code refactoring in its editor. Integrations feature gocode support, GOPATH API index, debugging with GDB, and a Go playground. LiteIDE is free and open source.
Komodo IDE supports Go syntax checking (linting) and highlighting, syntax coloring, code folding, and other productivity-enhancing features. Komodo also supports Go code intelligence with completions, call tips, outlines, and go-to-definition. Refactoring includes renaming variables and class members and method extraction. Komodo supports Go unit testing, code collaboration, version control, interactive shells, and code profiling. Komodo’s major claim to fame is that it supports all major open source languages, including Python, Node.js, Ruby, Go, Perl, and Tcl.
Komodo IDE is a commercial product. Komodo Editor, which has a subset of the IDE’s capabilities, is free.
While an IDE may provide all the functionality you want for developing code, IDEs can often feel “heavy.” In other words, they can take a long time to start up, use a lot of memory, and sometimes feel unresponsive as you type code because they’re doing too much in the background. Code editors can sometimes be preferable, especially for short sessions, as long as you’re not bothered by having to switch to a separate command-line shell window for compiling.
Plugins can sometimes add IDE-like features to code editors. That’s usually good, as long as the periodic overhead of keeping the plugins up-to-date and the constant overhead of the plugins running processes in the background don’t slow down your editing.
Atom, Brackets, and Visual Studio Code are the three editors that stood out for me for working in the Go language. All are free and open source. Nevertheless, BBEdit, Emacs, Notepad++, Sublime Text, TextMate, and Vim all integrate with Go language plugins, and all have their proponents. Emacs, Notepad++, and Vim are free and open source. BBEdit is commercial, but its little brother TextWrangler is free.
The Atom editor from GitHub ships with the language-go package, which supports Go grammar and snippets. Additional packages for Go bring more functionality. For example, go-plus integrates with many standard Go tools (for autocompletion, formatting, linting, testing) to provide an IDE-like environment, and go-debug integrates with the delve debugger.
The Brackets editor from Adobe has several community extensions for Go support. These include Go-IDE, which uses
gocode for autocompletion; Go-Syntax, which uses CodeMirror for syntax highlighting; and Improved Go Formatter, which uses
gofmt to format code and
goimports to manage imports.
Visual Studio Code supports Go syntax highlighting out of the box. Additional features are provided by the vscode-go plugin, which integrates with more than a dozen standard Go tools. If you don’t have your GOPATH set, the plugin will ask you to set it as soon as you try to edit a Go language file; you can set it for the project and/or the system environment. If you don’t have the Go tools installed, the plugin will ask to install them in the standard places as determined by your GOPATH.
Cloud-based Go IDEs
Cloud-based IDEs are a relatively recent innovation in the software development space. They have two inherent advantages: They require no local setup other than a compatible browser, and they may allow editing by multiple developers if designed for it. On the downside, cloud-based IDEs often suffer from lag, which can drive developers nuts and interfere with the “flow” that allows coders to be most productive. Three cloud-based IDEs currently support the Go language: Cloud9, CodeEnv, and Wide.
Cloud9 is a multilanguage cloud-based IDE that supports Go out of the box. It connects with GitHub, Bitbucket, and Google Cloud Platform repositories, and it has workspaces you can share and clone. In addition to a code editor with an extensive feature set and an online file system, it has MySQL and other databases, terminal and immediate windows, and customizable keyboard bindings, with Vim, Emacs, and Sublime Text modes supplied standard. Autocompletion and debugging for Go are still experimental, but syntax highlighting, the run panel, outline view, and linting are all fully supported.
CodeEnv is also a multilanguage cloud-based IDE. There is a Go base environment image for private environments, as well as a public Go environment image. Each environment consists of a file system, a simple code editor with syntax highlighting, and a terminal window. There are currently eight choices of base image and six choices of back-end image.
Wide is a web-based IDE for teams that is written in and for the Go programming language. It uses a CodeMirror-based themed programming editor with gocode-assisted syntax highlighting, autocompletion, code formatting, and real-time collaboration. Wide cites LiteIDE as a dependency.
JetBrains Gogland, currently in an early preview state, appears to be the most complete Go IDE available, though it hasn’t yet been released commercially. Its integrated debugger, coverage analysis, and test running go a long way toward distinguishing it from the run-of-the-mill editors that have a few tool integrations.
In the screenshot below, where I use Gogland to examine some of the Go language project’s source code, you can see several Gogland editing features, including the project tree, an inspection hint (the light bulb), exit point highlighting, and quick browsing using the navigation bar on the right (the box of code with line numbers out of order). For more screenshots showing what Gogland can do, I’ll refer you to JetBrains’ features guide.
Gogland uses the same JetBrains plugin ecosystem as IntelliJ IDEA and WebStorm, and it already includes many relevant features inherited from those products. For example, you can use Gogland for working with HTML and front-end languages and frameworks, exactly like WebStorm. Gogland also lets you work with SQL databases, like IntelliJ IDEA and DataGrip. If you need to combine Node.js support with your Go coding or need Subversion support in addition to Git integration, it’s a quick matter of adding the plugins.
Visual Studio Code
Visual Studio Code with the vscode-go plugin is a nice Go editor that works well and has good Git integration. Visual Studio Code does need updates and a restart at least monthly, but it rarely feels slow during editing. In the screenshot below we see the explorer on the left, Go tools installation at the bottom right, and code editing at the top right.
The Go tools enable the vscode-go plugin, which supplies many editing and code checking features. These include completion lists (using
gocode), signature help (using
godoc), snippets, quick info (using
godoc), go to definition (using
godoc), find references (using
guru), file outline (using
go-outline), workspace symbol search (using
go-symbols), rename (using
gorename), build-on-save (using
go build and
go test), lint-on-save (using
gometalinter), format (using
gofmt), generate unit tests skeleton (using
gotests), add imports (using
gopkgs), and partially implemented debugging (using
That’s a whole lot of useful functionality, although not as much as you get in the Gogland IDE. The screencast in the vscode-go readme file does a good job of demonstrating how most of the features work.
Of the three cloud IDEs that support Go, the most interesting currently seems to be Cloud9. It has the most functional programming editor of the three and supports about 17 languages in addition to Go. Though its Go language code completion is marked experimental, I found it worked pretty well and didn’t cause much in the way of typing delays.
Cloud9’s Ace editor currently supports syntax highlighting for more than 100 programming languages. The number 17 above is for languages that also have other support, such as running the code, linting, outlining, code completion, and debugging.
Cloud9 workspaces currently run Ubuntu 14.04 and Go 1.7.3. You can update your Go installation from the Bash shell (see bottom of screenshot), as well as run your Go and other programs from Bash.
As we have seen, you have many possible choices of programming environment for Go development. While I picked Gogland as the best full-featured Go IDE, Visual Studio Code with vscode-go as the best Go editor, and Cloud9 as the best Go cloud IDE for me, there are more than 30 other possibilities. Given how personal the choice of software development environments can be, you should try a few and see which fit your needs and preferences best.
This story, "The top Go language IDEs and editors" was originally published by InfoWorld.