GoLand 2021.1 Reaches Beta!
The release of GoLand 2021.1 is just around the corner, and today we can announce that GoLand 2021.1 Beta is ready for you to try.
The Beta version is quite stable in comparison to the Early Access Program builds, but please keep in mind that there may still be a couple of rough edges here and there.
Beta builds are usually the last builds in the EAP cycle that do not require a subscription to use.
GoLand 2021.1 allows you to build and run your program remotely via Docker, SSH, and WSL 2. You will find the new features from Go 1.16 supported, including //go:embed, code generation from JSON, and dozens of quick-fixes for easy error handling.
As usual, you can get the build via the Toolbox App, download it from our website, or use a snap package (for Ubuntu). Or you can update using GoLand, just select Automatically check updates for Early Access Program in Settings/Preferences | Appearance & Behavior | System Settings | Updates.
If you want an interactive introduction to the new features, the new What’s New in GoLand 2021.1 course is already available for you on the Learn GoLand tab of the Welcome screen.
In GoLand 2021.1 you can develop on your machine, with all the source code available to you locally, and target remote computers to run your code. Currently, the IDE supports Docker, SSH, and WSL 2 (Windows Subsystem for Linux). In settings, choose Run | Manage Targets…, click the Add icon (+), and select the targets you want to work with. After completing the configuration, you need to specify the Run Configuration from Run | Edit Configurations… and select the target you want to work with.
Please note that Run Targets support is still in its early stages, and you might encounter some limitations.
Support for //go:embed
Starting with Go 1.16, you’ll be able to embed files and directories into a Go binary at build time.
Embedding works on a few types of variables: string, byte, and embed.FS. You need to declare these variables at the top level of your package, which means that function bodies cannot contain them. Finally, you need to add the //go:embed directive for embedding to work.
GoLand provides code highlighting, navigation from references inside the embed directive to files and folders in your project, Rename refactoring, Find Usages, code completion, and a few code inspections. For example, GoLand will notify you if you try to embed files into a variable of the wrong type.
Detecting incorrect usages of (t/b).Fatal
GoLand warns you about invalid calls to the
testing.T method Fatal within a goroutine created during the test. The dedicated quick-fix will rewrite the code calling t.Fatal (or a similar method) so that it signals the test failure using t.Error and exits the goroutine early using a return statement.
Detecting incorrect usages of asn1.Unmarshal
In Go 1.16, go vet detects incorrect usages of asn1.Unmarshal, making sure that the value in which a slice of bytes is unmarshaled is not nil. GoLand 2021.1 provides a similar check with a quick-fix to resolve this problem.
Working with JSON
It’s now much easier to create JSON and XML tags for all the exported fields in the struct.
When you use Alt+Enter to invoke Add key to tags on the struct or on any field in the struct, GoLand adds a tag to all fields in the struct with field names. If you want to change the style of the field name for all tags, press Alt+Enter again on any key and choose Change field name style in tags. The supported styles are fieldName, FieldName, field-name, and field_name.
You can update all tag values at once with the Update key value in tags intention action. Press Alt+Enter on any tag value in your struct and GoLand will add carets at the end of the tag values in every field.
Additionally, the IDE provides a completion for well-known tokens inside tag values provided by SDK for JSON, XML, and ASN.1 code.
Generate a struct with fields and tags from JSON in no time by simply copy-pasting JSON data into the editor. If you want to adjust the JSON before generating a struct, press Alt+Enter to invoke the Generate type from JSON intention. GoLand will open the Generate Go type from the JSON window with the copied JSON. You can tune it as you wish in the window, then press the Generate button and your struct will be ready to go. Of course, it’s also possible to paste JSON into the window manually.
Additionally, it’s possible to convert JSON inside an already existing empty struct. To do so, just click this empty struct and call the Generate struct fields from JSON intention action by pressing Alt+Enter or by using the Generate menu.
Additionally, GoLand will notify you if you use invalid JSON code in the Generate Go type from JSON window.
Last but not least, GoLand 2021.1 supports the newline-delimited JSON Lines at used for working with structured data and logs. The IDE will recognize .jsonl, .jslines, .ldjson, and .ndjson file types.
In this format, files contain several lines, and each new line is a JSON object separated by a newline character. Commas are required at neither the beginning nor end of lines, and there is no need to enclose the entirety of the file contents in square or curly braces.
Handle errors with ease
The Unhandled Error code inspection has gained a whole family of quick-fixes:
- The Handle error quick-fix assigns call results to variables and generates an if error not nil check.
- The Wrap error handling in a closure quick-fix, which is available for defer and go statements, produces code similar to Handle error but wraps everything in a closure.
- We’ve extended the Ignore explicitly application area to include defer and go statements. The quick-fix assigns the call results to blank variables and wraps everything in a closure.
Quick-fix for type incompatibility inside composite literals
We’ve expanded the application area of the quick-fix that addresses type incompatibility. It now also suggests implementing an interface and converting to the expected type inside composite literals.
Create Type quick-fix generates missing fields
The Create Type quick-fix offers not only to create a type when GoLand notices you are using one that has not yet been defined, but also it will create fields for you as well.
Generate all getters and setters at once
Generating get and set methods for each field in huge structs can be rather tedious. You can now generate getters and setters for the whole struct all at once. Press Alt+Enter on any field name in the struct, then choose Generate getter and setters from the drop-down menu. GoLand will open the Select Fields window, where you can generate get and set methods for all the fields or just for the fields you need.
The Extract Type refactoring lets you extract a type from an existing one or convert an anonymous structure type to a named type. Press Ctrl+Alt+Shift+T on Windows/Linux or Ctrl+T on macOS to invoke it.
Sometimes you need to rename a module once you have sufficiently experimented with the project and done all your initial work. We’ve added a Rename refactoring to the go.mod file. It allows you to rename the module with a new name safely,without needing to do a search and replace in the project tree to replace the old module name.
Invoke the Rename refactoring on the module name with ⇧F6 on macOS or Shift+F6 on Windows/Linux. GoLand will open the Rename window, where you can change the current name, choose whether to change it in comments and strings, and open a preview of the refactoring. From the Refactoring Preview tab, you can navigate to all usages of this module name. You can use undo to quickly revert all changes implemented using the refactoring.
New varCheckError Postfix Completion
Type .vCE after an identifier that returns an error, and the IDE will automatically add default variable names and return the error from the function.
Support for import grouping in the style of “goimports -local”
The built-in formatter can now group imports in the same way goimports -local does.
To enable this support, head over to Preferences/Settings | Editor | Code Style | Go | Imports and enable import grouping. Then you can specify which imports should be grouped into separate blocks.
Run & Debug
Run program with sudo using elevation service
GoLand 2021.1 allows you to run an extended sudo session. On the first run, GoLand will ask whether you want to keep sudo running or terminate it immediately. If you would like to
change your response, go to Preferences/Settings | Appearance & Behavior | System Settings | Process Elevation.
Please note that by enabling this option you grant GoLand and all third-party plugins access to your system.
We’ve enabled Machine Learning-Assisted Completion. This change introduces the early stages of code completion based on machine learning (ML), which is an alternative to the standard ranking mechanism.
This code completion applies sorting rules learned from data we have gathered anonymously during our EAPs, resulting in better suggestions. Note that we have not collected any source code, only information about interactions with the code completion UI.
Tick Mark position changes in the completion popup in Preferences/Settings | Editor | General | Code Completion to mark options reranked by ML completion with up/down arrow icons in the completion list.
Quick Access Menu
The Configuration widget, which was previously available in the bottom left-hand corner of the IDE, has been replaced with a quick access menu. This new menu appears in the top right-hand corner. Press the gear icon to switch themes or keymaps, navigate to plugins, or go to the settings.
Quick access to recent projects on Windows
You can now access your recent projects by right-clicking on the GoLand icon on the taskbar or on the Start menu in Windows.
Better tooltips display
Tooltips are now shown one after another to prevent them from overlapping.
We are continually working to make our IDE more accessible to all users. We’ve added more labels to UI elements on the Welcome screen, the Project Structure view, and the VCS log.
These elements and gutter icons are now read out correctly when a screen reader is enabled.
You can now select the font variations from the Settings/Preferences | Editor | Font settings panel.
Built-in HTML preview
To open the preview, click on the GoLand logo in the widget located in the top right-hand corner of the editor.
Maximize editor tabs in the split view
Need more space when working on multiple files simultaneously in a split editor? Double-click the tab you’re working with to maximize the editor window for it. To bring that tab back to its original size, simply double-click it again.
Makefile Language plugin works by default
The Makefile Language plugin (previously 3rd-party), which provides GNU Make language support, is now bundled by default. Starting with GoLand 2021.1, you will get syntax highlighting, quick documentation, Find Usages for targets, and some navigation and code completion actions for Makefile right out of the box!
Visual Stage Separator in multistage Dockerfiles
It’s now easier than ever to read multistage Dockerfiles thanks to the separator lines that define boundaries between one stage and another. No more guesswork is needed to determine when a stage ends and when one begins.
The GoLand team