Using Go 1.20.10 Toolset
Installing and using Go 1.20.10 Toolset
Abstract
Making open source more inclusive
Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. Because of the enormity of this endeavor, these changes will be implemented gradually over several upcoming releases. For more details, see our CTO Chris Wright’s message.
Providing feedback on Red Hat documentation
We appreciate your feedback on our documentation. Let us know how we can improve it.
Submitting comments on specific passages
- View the documentation in the Multi-page HTML format and ensure that you see the Feedback button in the upper right corner after the page fully loads.
- Use your cursor to highlight the part of the text that you want to comment on.
- Click the Add Feedback button that appears near the highlighted text.
- Add your feedback and click Submit.
Submitting feedback through Jira (account required)
- Log in to the Jira website.
- Click Create in the top navigation bar
- Enter a descriptive title in the Summary field.
- Enter your suggestion for improvement in the Description field. Include links to the relevant parts of the documentation.
- Click Create at the bottom of the dialogue.
Chapter 1. Go Toolset
Go Toolset is a Red Hat offering for developers on Red Hat Enterprise Linux (RHEL). It provides the Go programming language tools and libraries. Note that Go is alternatively known as golang.
Go Toolset is available as a module for Red Hat Enterprise Linux 8. Go Toolset is available as packages for Red Hat Enterprise Linux 9.
1.1. Go Toolset components
The following components are available as a part of Go Toolset:
Name | Version | Description |
---|---|---|
golang | RHEL 8 — 1.20.10, RHEL 9 — 1.20.10 | A Go compiler. |
delve | RHEL 8 — 1.20.2, RHEL 9 — 1.20.2 | A Go debugger. |
1.2. Go Toolset compatibility
Go Toolset is available for Red Hat Enterprise Linux 8 and Red Hat Enterprise Linux 9 on the following architectures:
- AMD and Intel 64-bit
- 64-bit ARM
- IBM Power Systems, Little Endian
- 64-bit IBM Z
1.3. Installing Go Toolset
Complete the following steps to install Go Toolset, including all dependent packages.
Prerequisites
- All available Red Hat Enterprise Linux updates are installed.
Procedure
On Red Hat Enterprise Linux 8, install the go-toolset
module by running:
# yum module install go-toolset
On Red Hat Enterprise Linux 9, install the go-toolset
package by running:
# dnf install go-toolset
1.4. Installing Go documentation
You can install documentation for the Go programming language on your local system.
Prerequisites
-
Go Toolset is installed.
For more information, see Installing Go Toolset.
Procedure
To install the golang-docs
package, run the following command:
On Red Hat Enterprise Linux 8:
# yum install golang-docs
You can find the documentation under the following path:
/usr/lib/golang/doc/go_spec.html
.On Red Hat Enterprise Linux 9:
# dnf install golang-docs
You can find the documentation under the following path:
/usr/lib/golang/doc/go_spec.html
.
1.5. Additional resources
- For more information on the Go programming language, tools, and libraries, see the official Go documentation.
Chapter 2. The Go compiler
The Go compiler is a build tool and dependency manager for the Go programming language. It offers error checking and optimization of your code.
2.1. Prerequisites
-
Go Toolset is installed.
For more information, see Installing Go Toolset.
2.2. Setting up a Go workspace
To compile a Go program, you need to set up a Go workspace.
Procedure
Create a workspace directory as a subdirectory of
$GOPATH/src
.A common choice is
$HOME/go
.- Place your source files into your workspace directory.
Set the location of your workspace directory as an environment variable to the
$HOME/.bashrc
file by running:$ echo 'export GOPATH=<workspace_dir>' >> $HOME/.bashrc $ source $HOME/.bashrc
Replace <workspace_dir> with the name of your workspace directory.
Additional resources
2.3. Compiling a Go program
You can compile your Go program using the Go compiler. The Go compiler creates an executable binary file as a result of compiling.
Prerequisites
-
A set up Go workspace with configured modules.
For information on how to set up a workspace, see Setting up a Go workspace.
Procedure
In your project directory, run:
On Red Hat Enterprise Linux 8:
$ go build -o <output_file>
<go_main_package>
-
Replace
<output_file>
with the desired name of your output file and<go_main_package>
with the name of your main package.
-
Replace
On Red Hat Enterprise Linux 9:
$ go build -o <output_file>
<go_main_package>
-
Replace
<output_file>
with the desired name of your output file and<go_main_package>
with the name of your main package.
-
Replace
2.4. Running a Go program
The Go compiler creates an executable binary file as a result of compiling. Complete the following steps to execute this file and run your program.
Prerequisites
-
Your program is compiled.
For more information on how to compile your program, see Compiling a Go program.
Procedure
To run your program, run in the directory containing the executable file:
$ ./<file_name>
-
Replace
<file_name>
with the name of your executable file.
2.5. Installing compiled Go projects
You can install already compiled Go projects to use their executable files and libraries in further Go projects. After installation, the executable files and libraries of the project are copied to according directories in the Go workspace. Its dependencies are installed as well.
Prerequisites
-
A Go workspace with configured modules.
For more information, see Setting up a Go workspace.
Procedure
To install a Go project, run:
On Red Hat Enterprise Linux 8:
$ go install <go_project>
-
Replace
<go_project>
with the name of the Go project you want to install.
-
Replace
On Red Hat Enterprise Linux 9:
$ go install <go_project>
-
Replace
<go_project>
with the name of the Go project you want to install.
-
Replace
2.6. Downloading and installing Go projects
You can download and install third-party Go projects from online resources to use their executable files and libraries in further Go projects. After installation, the executable files and libraries of the project are copied to according directories in the Go workspace. Its dependencies are installed as well.
Prerequisites
-
A Go workspace.
For more information, see Setting up a Go workspace.
Procedure
To download and install a Go project, run:
On Red Hat Enterprise Linux 8:
$ go install <third_party_go_project>
-
Replace
<third_party_go_project>
with the name of the project you want to download.
-
Replace
On Red Hat Enterprise Linux 9:
$ go install <third_party_go_project>
-
Replace
<third_party_go_project>
with the name of the project you want to download.
-
Replace
For information on possible values of third-party projects, run:
On Red Hat Enterprise Linux 8:
$ go help importpath
On Red Hat Enterprise Linux 9:
$ go help importpath
2.7. Additional resources
- For more information on the Go compiler, see the official Go documentation.
To display the
help
index included in Go Toolset, run:On Red Hat Enterprise Linux 8:
$ go help
On Red Hat Enterprise Linux 9:
$ go help
To display documentation for specific Go packages, run:
On Red Hat Enterprise Linux 8:
$ go doc <package_name>
On Red Hat Enterprise Linux 9:
$ go doc <package_name>
See Go packages for an overview of Go packages.
Chapter 3. The gofmt formatting tool
Instead of a style guide, the Go programming language uses the gofmt
code formatting tool. gofmt
automatically formats your code according to the Go layout rules.
3.1. Prerequisites
-
Go Toolset is installed.
For more information, see Installing Go Toolset.
3.2. Formatting code
You can use the gofmt
formatting tool to format code in a given path. When the path leads to a single file, the changes apply only to the file. When the path leads to a directory, all .go
files in the directory are processed.
Procedure
To format your code in a given path, run:
On Red Hat Enterprise Linux 8:
$ gofmt -w <code_path>
-
Replace
<code_path>
with the path to the code you want to format.
-
Replace
On Red Hat Enterprise Linux 9:
$ gofmt -w <code_path>
-
Replace
<code_path>
with the path to the code you want to format.
-
Replace
To print the formatted code to standard output instead of writing it to the original file, omit the -w
option.
3.3. Previewing changes to code
You can use the gofmt
formatting tool to preview changes done by formatting code in a given path. The output in unified diff format is printed to standard output.
Procedure
To show differences in your code in a given path, run:
On Red Hat Enterprise Linux 8:
$ gofmt -w -d <code_path>
-
Replace
<code_path>
with the path to the code you want to compare.
-
Replace
On Red Hat Enterprise Linux 9:
$ gofmt -w -d <code_path>
-
Replace
<code_path>
with the path to the code you want to compare.
-
Replace
3.4. Simplifying code
You can use the gofmt
formatting tool to simplify your code.
Procedure
To simplify anf format code in a given path, run:
On Red Hat Enterprise Linux 8:
$ gofmt -s -w <code_path>
-
Replace
<code_path>
with the path to the code you want to simplify.
-
Replace
On Red Hat Enterprise Linux 9:
$ gofmt -s -w <code_path>
-
Replace
<code_path>
with the path to the code you want to simplify.
-
Replace
3.5. Refactoring code
You can use the gofmt
formatting tool to refactor your code by applying arbitrary substitutions.
Procedure
To refactor and format your code in a given path, run:
On Red Hat Enterprise Linux 8:
$ gofmt -r -w <rewrite_rule> <code_path>
-
Replace
<code_path>
with the path to the code you want to refactor and<rewrite_rule>
with the rule you want it to be rewritten by.
-
Replace
On Red Hat Enterprise Linux 9:
$ gofmt -r -w <rewrite_rule> <code_path>
-
Replace
<code_path>
with the path to the code you want to refactor and<rewrite_rule>
with the rule you want it to be rewritten by.
-
Replace
3.6. Additional resources
Chapter 4. The Go race detector
Go Toolset includes the Go race detector, which is a tool of the Go standard library for finding race conditions.
Note that the race detector has a significant runtime resource overhead.
4.1. Prerequisites
-
Go Toolset is installed.
For more information, see Installing Go Toolset.
4.2. Using the Go race detector
Use the Go race detector to check your code for race conditions.
Procedure
To use the race detector, run:
On Red Hat Enterprise Linux 8:
$ go build -race -o <output_file> <go_main_package>
-
Replace
<output_file>
with the name of your executable file and<go_main_package>
with the name of the package you want to test.
-
Replace
On Red Hat Enterprise Linux 9:
$ go build -race -o <output_file> <go_main_package>
-
Replace
<output_file>
with the name of your executable file and<go_main_package>
with the name of the package you want to test.
-
Replace
4.3. Additional resources
Chapter 5. Container images with Go Toolset
You can build your own Go Toolset containers from either Red Hat Enterprise Linux container images or Red Hat Universal Base Images (UBI).
5.1. Red Hat Enterprise Linux Go Toolset container images contents
The Red Hat Enterprise Linux 8 and Red Hat Enterprise Linux 9 container images of Go Toolset contain the following packages:
Component | Version | Package |
---|---|---|
| 1.20 | RHEL 8 — go-toolset-1.20.10 RHEL 9 — go-toolset-1.20.10 |
5.2. Accessing Red Hat Enterprise Linux container images
Pull the container image from the Red Hat registry before running your container and performing actions.
Procedure
To pull the required image, run:
For an image based on Red Hat Enterprise Linux 8:
# podman pull registry.redhat.io/rhel8/go-toolset
For an image based on Red Hat Enterprise Linux 9:
# podman pull registry.redhat.io/rhel9/go-toolset
5.3. Accessing the UBI Go Toolset container image on RHEL 8
On RHEL 8, install the UBI Go Toolset container image to access Go Toolset.
Alternatively, you can install Go Toolset to the RHEL 8 base UBI container image. For further information, see Accessing Go Toolset from the base UBI container image on RHEL 8.
Procedure
To pull the UBI Go Toolset container image from the Red Hat registry, run:
# podman pull registry.access.redhat.com/ubi8/go-toolset
5.4. Accessing Go Toolset from the base UBI container image on RHEL 8
On RHEL 8, Go Toolset packages are part of the Red Hat Universal Base Images (UBIs) repositories, which means you can install Go Toolset as an addition to the base UBI container image. To keep the container image size small, install only individual packages instead of the entire Go Toolset.
Alternatively, you can install the UBI Go Toolset container image to access Go Toolset. For further information, see Accessing the UBI Go Toolset container image on RHEL 8.
Prerequisites
-
An existing Containerfile.
For information on creating Containerfiles, see the Dockerfile reference page.
Procedure
- To create a container image containing Go Toolset, add the following lines to your Containerfile:
FROM registry.access.redhat.com/ubi8/ubi:latest
RUN yum module install -y go-toolset
To create a container image containing an individual package only, add the following lines to your Containerfile:
RUN yum install -y <package-name>
-
Replace
<package-name>
with the name of the package you want to install.
-
Replace
5.5. Additional resources
- Go Toolset Container Images in the Red Hat Container Registry.
- For more information on Red Hat UBI images, see Working with Container Images.
- For more information on Red Hat UBI repositories, see Universal Base Images (UBI): Images, repositories, packages, and source code.
Chapter 6. Changes in Go Toolset
Go Toolset has been updated from version 1.19 to 1.20.10 on RHEL 8 and RHEL 9.
Notable changes include:
-
New functions added in the
unsafe
package to handle slices and strings without depending on the internal representation. - Comparable types can now satisfy comparable constraints.
-
A new
crypto/ecdh
package. -
The
go build
andgo test
commands no longer accept the-i
flag. -
The
go generate
andgo test
commands now accept the-skip pattern
option. -
The
go build
,go install
, and other build-related commands now support the-pgo
and-cover
flags. -
The
go
command now disablescgo
by default on systems without a C toolchain. -
The
go version -m
command now supports reading more Go binaries types. -
The
go
command now disablescgo
by default on systems without a C toolchain. - Added support for collecting code coverage profiles from applications and integration tests instead of collecting them only from unit tests.
For detailed information regarding the updates, see the upstream Go 1.20 Release Notes.