{"id":115644,"date":"2021-02-12T10:59:07","date_gmt":"2021-02-12T09:59:07","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=go&#038;p=115644"},"modified":"2021-06-07T09:50:45","modified_gmt":"2021-06-07T08:50:45","slug":"goland-2021-1-eap-3","status":"publish","type":"go","link":"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3","title":{"rendered":"GoLand 2021.1 EAP 3 Introduces go:embed Support, Run Targets, Extract Type Refactoring, and More"},"content":{"rendered":"<p>It&#8217;s a new week, and we have a new GoLand 2021.1 EAP release to share with you. It has a lot of new and exciting features to try out.<\/p>\n<p>What have we been up to?<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#support_for_go_embed\">Support for <em>\/\/go:embed<\/em> is now available for Go 1.16 or later (<\/a><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/GO-10062\" target=\"_blank\" rel=\"noopener\">GO-10062<\/a>)<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#run_targets\">Initial Run Targets support<\/a>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#run_target_for_docker\">Docker (<\/a><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/GO-3322\" target=\"_blank\" rel=\"noopener\">GO-3322<\/a>)<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#run_target_for_ssh\">SSH<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#run_target_for_wsl\">WSL2 (Windows Subsystem for Linux) (<\/a><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/GO-4377\" target=\"_blank\" rel=\"noopener\">GO-4377<\/a>)<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#extract_type_refactoring\">Extract Type Refactoring (<\/a><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/GO-17\" target=\"_blank\" rel=\"noopener\">GO-17<\/a>)<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#create_type_quick_fix_generates_missing_fields\">Create Type quickfix generates missing fields (<\/a><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/GO-7615\" target=\"_blank\" rel=\"noopener\">GO-7615<\/a>)<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#other_changes\">Other noteworthy changes<\/a>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#json_lines_support\">JSON Lines support<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#quick_access_to_recent_projects_on_windows\">Quick access to recent projects on Windows<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#better_tooltips_display\">Better tooltips display<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#improved_accessibility\">Improved accessibility<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#visual_stage_separator_in_multistage_dockerfiles\">Visual separators between stages in multi-stage Dockerfiles in the editor (<\/a><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/IDEA-261079\" target=\"_blank\" rel=\"noopener\">IDEA-261079<\/a>)<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/zh-hans\/go\/2021\/02\/12\/goland-2021-1-eap-3#font_variations\">Select Font variations from IDE settings<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>And of course, there are plenty of other fixes and improvements under the hood.<\/p>\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/go\/nextversion\/\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>Download GoLand 2021.1 EAP #3<\/a><\/p>\n<p>You can get the build via the <a href=\"https:\/\/www.jetbrains.com\/toolbox\/app\/\" target=\"_blank\" rel=\"noopener\">Toolbox App<\/a>, download it from our <a href=\"https:\/\/www.jetbrains.com\/go\/nextversion\/\" target=\"_blank\" rel=\"noopener\">website<\/a>, or use a snap package (for Ubuntu). Or from inside GoLand, select <em>Automatically check updates for Early Access Program<\/em> in <em>Settings\/Preferences | Appearance &amp; Behavior | System Settings | Updates<\/em>.<\/p>\n<h2 id=\"support_for_go_embed\">Support for \/\/go:embed<\/h2>\n<p>Starting with Go 1.16, which is due to be released sometime soon, you&#8217;ll be able to embed files and directories into a Go binary at build time.<\/p>\n<p>Let&#8217;s take a look at how we could do that.<\/p>\n<p>Embedding works on a few types of variables: string, []byte, and <a href=\"https:\/\/tip.golang.org\/pkg\/embed\/#FS\" target=\"_blank\" rel=\"noopener\">embed.FS<\/a>. We also need to declare these variables at the top level of our package, which means that these variables cannot be contained within function bodies.<\/p>\n<p>Finally, we need to add the <code>\/\/go:embed<\/code> directive for embedding to work.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/go-embed-sample-optimized.png\" alt=\"Go 1.16 embed support - sample\" width=\"750\" height=\"422\" \/><\/p>\n<p>You may notice in the screenshot that &#8220;resources&#8221; is highlighted a little bit differently than usual.<\/p>\n<p>That&#8217;s because we didn&#8217;t stop at just adding a different color for this type of comment. In this case, &#8220;resources&#8221; is a reference to a folder in the project directory with the same name.<\/p>\n<p>The IDE allows you to quickly navigate from references inside the embed directive to the files and folders in your project.<\/p>\n<p>It can also display some useful information about them, such as the file size, and it can even allow you to rename them inside the code.<\/p>\n<p>If you use <em>Rename<\/em>, <em>Shift + F6<\/em>, on the referenced file or folder from the <em>Project Tool<\/em> window, it will be renamed inside the embed directive.<\/p>\n<p>And if you invoke <em>Find Usages<\/em>, <em>Alt + F7<\/em> on Windows\/Linux or <em>Opt + F7<\/em> on macOS, then you&#8217;ll be able to find it inside your code too!<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Go-1.16-go-embed-support-part-1-optimized.png\" alt=\"Go 1.16 embed support - features\" width=\"750\" height=\"422\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Go-1.16-go-embed-support-part-1-optimized.gif\" \/><\/p>\n<p>Did you notice that you can also use completion inside the embed directive?<\/p>\n<p>To prevent errors that may occur when using this new syntax, we added a few inspections too.<\/p>\n<p>If you reference a file or folder that doesn&#8217;t exist, the IDE will tell you about it.<\/p>\n<p>Do you want to try to embed files in a struct type or other unsupported types? The IDE will also catch that and inform you about it.<\/p>\n<p>What if you forget to add the &#8220;embed&#8221; package to your import list? Use <em>Alt+Enter<\/em> to bring up the <em>Show Context Actions<\/em> menu and select <em>Import embed<\/em> from the available quick-fixes list. It will be smart enough to import it for side-effects only if you don&#8217;t&#8217; use an <code>embed.FS<\/code> type already.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Go-1.16-go-embed-support-part-2-optimized.png\" alt=\"Go 1.16 embed support - inspections\" width=\"750\" height=\"422\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Go-1.16-go-embed-support-part-2-optimized.gif\" \/><\/p>\n<h2 id=\"run_targets\">Run targets<\/h2>\n<p>GoLand has only been capable of building and running code on the machine installed on until now.<\/p>\n<p>However, many users have told us that they&#8217;d like to run their code closer to the environment that they&#8217;ll end up deploying in.<\/p>\n<p>We&#8217;ve listened to this feedback, and today we are happy to show you the first version of the <em>Run Targets<\/em> EAP.<\/p>\n<p>This feature allows you to develop on the local machine, with all the source code available to you locally, while targeting remote computers for running that code.<\/p>\n<p>Please remember that this feature is in the early stages of development, and it may evolve or change as we iterate over it.<\/p>\n<p>At the moment, we support Docker, SSH, and WSL2 (Windows Subsystem for Linux).<\/p>\n<p><strong>Note<\/strong> In this first release, we support only the following scenario: the Build stage happens on the local machine while the Run and Debug stage occurs on the remote target. We are working to enable other use-cases. Stay tuned for more news on this!<\/p>\n<h3 id=\"run_target_for_docker\">Run Target for Docker<\/h3>\n<p>Let&#8217;s start with Docker support.<\/p>\n<p>Head over to <em>Run | Manage Targets\u2026 | + | Docker<\/em> and select the <em>Docker<\/em> type from the list.<\/p>\n<p>Then select whether you want to use an existing container image or pull one from a repository.<\/p>\n<p>If you need to expose any ports or use any other flags for the container runtime, you can add them under <em>Run options<\/em>. By default, the IDE adds &#8220;&#8211;rm&#8221; which will remove the container after it stops, making cleanup easier.<\/p>\n<p>Clicking <em>Next<\/em> will pull the container and allow the IDE to do an introspection of the build\/run environment to detect where the &#8220;go&#8221; binary is, what the &#8220;GOPATH&#8221; is, and what version of Go is being used.<\/p>\n<p>Finally, you can configure the container directory in which the IDE will place the sources and adjust any previously auto-detected features.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Run-Targets-Docker-Create-Target-optimized.png\" alt=\"Run Targets Create Docker Target\" width=\"750\" height=\"422\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Run-Targets-Docker-Create-Target-optimized.gif\" \/><\/p>\n<p>Now, let&#8217;s set up the <em>Run Configuration<\/em> from <em>Run | Edit Configurations\u2026<\/em> and select the configuration that should run via Docker.<\/p>\n<p>After changing the <em>Run on<\/em> field to match our newly created Docker Run Target, we can then click <em>Ok<\/em> and launch our <em>Run Configuration<\/em>.<\/p>\n<p>The IDE will compile our binary on the local machine and run it via the Docker container we specified in our <em>Run Target<\/em>.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Run-Targets-Docker-Run-on-Target-optimized.png\" alt=\"Run Targets Run Docker Target\" width=\"750\" height=\"422\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Run-Targets-Docker-Run-on-Target-optimized.gif\" \/><\/p>\n<p><strong>If you have feedback for this feature, head over <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/GO-3322\" target=\"_blank\" rel=\"noopener\">the dedicated issue<\/a>.<\/strong><\/p>\n<h3 id=\"run_target_for_ssh\">Run Target for SSH<\/h3>\n<p>Next on our list is support for targeting SSH remote configurations.<\/p>\n<p>Like the Docker Run Target, the SSH functionality starts by configuring a new SSH Run Target via <em>Run | Manage Targets\u2026 | + SSH<\/em>.<\/p>\n<p>We need to enter the hostname or IP address of the remote machine, the port on which SSH listens, and the username. Next, we need a password or SSH key-pair to connect to the target.<\/p>\n<p>Once those are provided, the IDE will again try to infer the environment from the machine.<\/p>\n<p><strong>Note:<\/strong> To ensure you get the best possible performance for transferring data between the local and remote machines, you should have rsync on the remote target.<\/p>\n<p>As with Docker, changing the Run Configuration to target the SSH Run Target allows us to run the binary against the remote machine.<\/p>\n<p><strong>Note:<\/strong> Binaries built on Windows 10 and running on UNIX-based systems are not currently supported using SSH Run Targets. We&#8217;ll address this in a future build.<\/p>\n<h3 id=\"run_target_for_wsl\">Run Target for WSL2<\/h3>\n<p>For users running Windows 10, <em>Remote Targets<\/em> can use <em>WSL2 (Windows Subsystem for Linux)<\/em>, in addition to <em>SSH<\/em> and <em>Docker<\/em>.<\/p>\n<p>This works by adding a WSL target from <em>Run | Manage Targets&#8230; | + | WSL<\/em>.<\/p>\n<p>You can configure a name for this target, then select which WSL2 Linux Distribution to use.<\/p>\n<p>Just add the path to the <em>Go executable<\/em> and <em>GOPATH<\/em> used under the selected Linux distribution, and you are good to go.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Run-Targets-WSL-Create-Target-optimized.png\" alt=\"Run Targets Create WSL2 Target\" width=\"750\" height=\"422\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Run-Targets-WSL-Create-Target-optimized.gif\" \/><\/p>\n<p>We are just a couple of steps away from making this work. Edit the <em>Run Configuration<\/em> and make its target the new <em>WSL2<\/em> configuration created above.<\/p>\n<p>That&#8217;s all you need to do. When you run your configuration, it will look and feel the same. GoLand will take the necessary steps to use WSL instead of Windows to run your code seamlessly under the hood.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Run-Targets-WSL-Run-on-Target-optimized.png\" alt=\"Run Targets Run WSL2 Target\" width=\"750\" height=\"422\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Run-Targets-WSL-Run-on-Target-optimized.gif\" \/><\/p>\n<p>At the moment, the build step will take place on the Windows side.<\/p>\n<p>This takes advantage of Go&#8217;s cross-compilation capability.<\/p>\n<p>As this feature is still in its early stages, you may encounter some limitations.<\/p>\n<p>For example, one of them involves projects that rely on CGO; cross-compilation is not as easy to do in this case.<\/p>\n<p>We&#8217;ll support additional scenarios, such as compiling on the remote side, to address these shortcomings.<\/p>\n<p><strong>If you have feedback for this feature, head over <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/GO-4377\" target=\"_blank\" rel=\"noopener\">the dedicated issue<\/a>.<\/strong><\/p>\n<h2 id=\"extract_type_refactoring\">Extract Type Refactoring<\/h2>\n<p>Have you ever wanted to extract a type from an existing one?<\/p>\n<p>Or to convert that anonymous structure type to a named type?<\/p>\n<p><em>Extract Type<\/em> refactoring, <em>Ctrl + Alt + Shift + T<\/em> on Windows\/Linux or <em>Ctrl + T<\/em> on macOS, will do just that.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Extract-Type-Refactoring-optimized.png\" alt=\"Extract Type Refactoring\" width=\"750\" height=\"422\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Extract-Type-Refactoring-optimized.gif\" \/><\/p>\n<h2 id=\"create_type_quick_fix_generates_missing_fields\">Create Type quick-fix generates missing fields<\/h2>\n<p>Before this release, GoLand would offer to create a type when it noticed you were using one that was not yet defined.<\/p>\n<p>However, in the case of struct types, it would only create the type itself, leaving the task of creating the fields to you.<\/p>\n<p>We&#8217;ve addressed this problem, and now GoLand can now automate this step for you.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Create-Type-Quickfix-optimized.png\" alt=\"Create Type Quickfix\" width=\"750\" height=\"422\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Create-Type-Quickfix-optimized.gif\" \/><\/p>\n<h2 id=\"other_changes\">Other changes<\/h2>\n<h4 id=\"json_lines_support\">JSON Lines support<\/h4>\n<p>GoLand now supports the newline-delimited <a href=\"https:\/\/jsonlines.org\/\" target=\"_blank\" rel=\"noopener\">JSON Lines<\/a><u> <\/u>format used for working with structured data and logs. The IDE will recognize the <em>.jsonl<\/em>, <em>.jslines<\/em>, <em>.ldjson<\/em>, and .<em>ndjson<\/em> file types.<\/p>\n<p>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.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/JSON-Lines-1.png\" alt=\"JSON Lines Support\" width=\"750\" height=\"422\" \/><\/p>\n<h4 id=\"quick_access_to_recent_projects_on_windows\">Quick access to recent projects on Windows<\/h4>\n<p>You can now access your recent projects by right-clicking on the GoLand icon on the taskbar or on the <em>Start<\/em> menu in Windows.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Windows-Jump-List.png\" alt=\"Windows Jump List Support\" width=\"750\" height=\"422\" \/><\/p>\n<h4 id=\"better_tooltips_display\">Better tooltips display<\/h4>\n<p>Tooltips are now shown one after another to prevent them from overlapping.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/UI-ToolTips.gif\" alt=\"Improved IDE Tooltips\" width=\"750\" height=\"422\" \/><\/p>\n<h4 id=\"improved_accessibility\">Improved accessibility<\/h4>\n<p>We are continually working to make our IDE more accessible to all users. In this EAP, we&#8217;ve added more labels to UI elements on the Welcome screen, the <em>Project Structure <\/em>view, and the VCS log. These elements and gutter icons are now read out correctly when a <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/accessibility.html#screen_reader\" target=\"_blank\" rel=\"noopener\">screen reader<\/a> is enabled. We are also working on better accessibility support for macOS users.<\/p>\n<h4 id=\"visual_stage_separator_in_multistage_dockerfiles\">Visual Stage Separator in multistage Dockerfiles<\/h4>\n<p>It&#8217;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.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/docker-multistage-optimized.png\" alt=\"Docker Multi-Stage Horizontal Lines Support\" width=\"750\" height=\"422\" \/><\/p>\n<h4 id=\"font_variations\">Font variations<\/h4>\n<p>You can now select the font variations from the <em>Settings\/Preferences | Editor | Font<\/em> settings panel.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-55173 size-full\" style=\"border: 1px solid #AAAAAA;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/font-variation-optimized.png\" alt=\"Font Variation Support\" width=\"750\" height=\"422\" \/><\/p>\n<p>Some other noteworthy bug fixes include:<\/p>\n<ul>\n<li>Buildkit is now supported as an experimental feature. You can find it in the Run Configuration of the Docker type Run Configurations.<\/li>\n<li>The IDE can now automatically detect case-sensitivity per directory. You don&#8217;t need to customize this setting manually. (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/IDEA-135546\" target=\"_blank\" rel=\"noopener\">IDEA-135546<\/a>)<\/li>\n<li>Fixed how floating windows are displayed. (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/JBR-1752\" target=\"_blank\" rel=\"noopener\">JBR-1752<\/a>)<\/li>\n<li>The <em>Find in Path<\/em> dialog now closes when you click on a code area. (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/IDEA-170038\" target=\"_blank\" rel=\"noopener\">IDEA-170038<\/a>)<\/li>\n<li>Fixed IDE crashes on macOS and at startup. (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/JBR-2947\" target=\"_blank\" rel=\"noopener\">JBR-2947<\/a>), (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/JBR-3066\" target=\"_blank\" rel=\"noopener\">JBR-3066<\/a>)<\/li>\n<\/ul>\n<p>If you learn about even more issues that have been addressed, take a look at our <a href=\"https:\/\/confluence.jetbrains.com\/display\/GOLAND\/GoLand%2B211.5787.16%2BRelease%2BNotes\" target=\"_blank\" rel=\"noopener\">release notes<\/a>.<\/p>\n<p>Our team is very excited about this release, and we hope you&#8217;ll find it equally exciting and useful.<\/p>\n<p>As usual, your feedback is invaluable to us, and we&#8217;d like to hear your thoughts about these features and about what else we can do to make your experience even better. Don&#8217;t hesitate to contact us by writing in the comments section below, opening an issue on <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/Go\" target=\"_blank\" rel=\"noopener\">our tracker<\/a>, dropping us a line in the <a href=\"https:\/\/invite.slack.golangbridge.org\/\" target=\"_blank\" rel=\"noopener\">Gophers Slack<\/a> #goland channel, or pinging on <a href=\"https:\/\/twitter.com\/GoLandIDE\" target=\"_blank\" rel=\"noopener\">Twitter<\/a> or social media platforms.<\/p>\n","protected":false},"author":828,"featured_media":111888,"comment_status":"closed","ping_status":"closed","template":"","categories":[826,4221],"tags":[6412,6471,600,6472,91,659,6453],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/go\/115644"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/go"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/types\/go"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/users\/828"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/comments?post=115644"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/go\/115644\/revisions"}],"predecessor-version":[{"id":151130,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/go\/115644\/revisions\/151130"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media\/111888"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media?parent=115644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/categories?post=115644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/tags?post=115644"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/cross-post-tag?post=115644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}