Using Go 1.24 Toolset


Red Hat Developer Tools 1

Installing and using Go 1.24 Toolset

Red Hat Customer Content Services

Abstract

Go Toolset is a Red Hat offering for developers on the Red Hat Enterprise Linux (RHEL) operating system. Use this guide for an overview of Go Toolset, to learn how to invoke and use different versions of Go tools, and to find resources with more in-depth information.

Providing feedback on Red Hat documentation

We appreciate your feedback on our documentation. Let us know how we can improve it.

Submitting feedback through Jira (account required)

  1. Log in to the Jira website.
  2. Click Create in the top navigation bar
  3. Enter a descriptive title in the Summary field.
  4. Enter your suggestion for improvement in the Description field. Include links to the relevant parts of the documentation.
  5. 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 RHEL 8 and as packages for RHEL 9 and 10.

1.1. Go Toolset components

The following components are available as a part of Go Toolset:

Expand
NameVersionDescription

golang

1.24

A Go compiler.

delve

1.24

A Go debugger.

1.2. Go Toolset compatibility

Go Toolset is available for Red Hat Enterprise Linux on the following architectures:

  • AMD and Intel 64-bit (x86_64)
  • 64-bit ARM (aarch64)
  • IBM Power Systems, Little Endian (ppc64le)
  • 64-bit IBM Z (s390x)

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

  • Install Go Toolset:

    • On RHEL 8, enter:

      # yum module install go-toolset
      Copy to Clipboard Toggle word wrap
    • On RHEL 9 and 10, enter:

      # dnf install go-toolset
      Copy to Clipboard Toggle word wrap

1.4. Installing Go documentation

You can install documentation for the Go programming language on your local system.

Procedure

  • Install the golang-docs package:

    • On RHEL 8, enter:

      # yum install golang-docs
      Copy to Clipboard Toggle word wrap
    • On RHEL 9 and 10, enter:

      # dnf install golang-docs
      Copy to Clipboard Toggle word wrap

Verification

  • Open /usr/lib/golang/doc/go_spec.html in a browser that is installed on the same host.

Chapter 2. The Go compiler

2.1. Prerequisites

2.2. Setting up a Go workspace

Modern Go projects are built using modules. You can start with a single module and then optionally group multiple modules into a workspace to work on them simultaneously.

Procedure

  1. Create a root directory for your projects, for example:

    $ mkdir ~/go-projects/
    Copy to Clipboard Toggle word wrap
  2. Change into the project directory:

    $ cd ~/go-projects/
    Copy to Clipboard Toggle word wrap
  3. Initialize a module:

    1. Create a directory for your module:

      $ mkdir <module_name>
      Copy to Clipboard Toggle word wrap
    2. Change into the module’s directory:

      $ cd <module_name>
      Copy to Clipboard Toggle word wrap
    3. Initialize the module:

      $ go mod init <module_name>
      Copy to Clipboard Toggle word wrap

      This command creates a single-module project.

    If you want to create multiple modules, repeat this step for every module.

  4. If you want to work on multiple modules at the same time, create a multi-module workspace:

    1. Change into the project directory:

      $ cd ~/go-projects/
      Copy to Clipboard Toggle word wrap
    2. Initialize a workspace to include multiple modules:

      $ go work init <module_name_1> <module_name_n> ...
      Copy to Clipboard Toggle word wrap

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

Procedure

  • Compile the Go sources in the current directory:

    $ go build .
    Copy to Clipboard Toggle word wrap

2.4. Running a Go program

The Go compiler creates an executable binary file as a result of compiling. Complete the following steps to run your program.

Procedure

  • Use one of the following options to execute your Go program:

    • To run an compiled program, enter:

      $ ./<file_name>
      Copy to Clipboard Toggle word wrap

      Replace <file_name> with the name of your executable file.

    • To compile the sources in the current directory and run the program in a single step, enter:

      $ go run .
      Copy to Clipboard Toggle word wrap

2.5. Installing compiled 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 according to the directories in the Go workspace. Its dependencies are installed as well.

Prerequisites

Procedure

  • Install a Go project:

    $ go install <go_project>
    Copy to Clipboard Toggle word wrap

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 according to the directories in the Go workspace. Its dependencies are installed as well.

Prerequisites

Procedure

  1. To download and install a Go project, enter:

    $ go install <third_party_go_project>
    Copy to Clipboard Toggle word wrap
  2. Optional: For information on possible values of third-party projects, enter:

    $ go help importpath
    Copy to Clipboard Toggle word wrap

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

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, enter:

    $ gofmt -w <code_path>
    Copy to Clipboard Toggle word wrap

    Replace <code_path> with the path to the code you want to format.

    Note

    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

  • Show differences in your code in a given path:

    $ gofmt -d <code_path>
    Copy to Clipboard Toggle word wrap

    Replace <code_path> with the path to the code you want to compare.

3.4. Simplifying code

You can use the gofmt formatting tool to simplify your code.

Procedure

  1. To simplify code in a given path, enter:

    $ gofmt -s -w <code_path>
    Copy to Clipboard Toggle word wrap

    Replace <code_path> with the path to the code you want to simplify.

  2. To apply the changes, enter:

    $ gofmt -w <code_path>
    Copy to Clipboard Toggle word wrap

    Replace <code_path> with the path to the code you want to format.

3.5. Refactoring code

You can use the gofmt formatting tool to refactor your code by applying arbitrary substitutions.

Procedure

  1. To refactor your code in a given path, enter:

    $ gofmt -r -w <rewrite_rule> <code_path>
    Copy to Clipboard Toggle word wrap

    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.

  2. To apply the changes, enter:

    # gofmt -w <code_path>
    Copy to Clipboard Toggle word wrap

    Replace <code_path> with the path to the code you want to format.

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

4.2. Using the Go race detector

Use the Go race detector to check your code for race conditions.

Procedure

  • Use the race detector:

    # go build -race -o <output_file> <go_main_package>
    Copy to Clipboard Toggle word wrap

    Replace <output_file> with the name of your executable file and <go_main_package> with the name of the package you want to test.

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).

The Red Hat Enterprise Linux container images of Go Toolset contain the following packages:

Expand
ComponentVersionPackage

Go

1.24

go-toolset-1.24

Pull the container image from the Red Hat registry before running your container and performing actions.

Procedure

  • Pull the required image:

    • For an image based on RHEL 8, enter:

      # podman pull registry.redhat.io/rhel8/go-toolset
      Copy to Clipboard Toggle word wrap
    • For an image based on RHEL 9, enter:

      # podman pull registry.redhat.io/rhel9/go-toolset
      Copy to Clipboard Toggle word wrap
    • For an image based on RHEL 10, enter:

      # podman pull registry.redhat.io/rhel10/go-toolset
      Copy to Clipboard Toggle word wrap

Pull the container image from the Red Hat registry before running your container and performing actions.

Procedure

  • Pull the required image:

    • For an image based on RHEL 8, enter:

      # podman pull registry.access.redhat.com/ubi8/go-toolset
      Copy to Clipboard Toggle word wrap
    • For an image based on RHEL 9, enter:

      # podman pull registry.access.redhat.com/ubi9/go-toolset
      Copy to Clipboard Toggle word wrap
    • For an image based on RHEL 10, enter:

      # podman pull registry.access.redhat.com/ubi10/go-toolset
      Copy to Clipboard Toggle word wrap

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 Pulling the UBI-based Go Toolset container image.

Prerequisites

  • An existing container file. For information on creating Containerfiles, see the Dockerfile reference page.

Procedure

  • To create a container image containing Go Toolset, add the following to your container file:

    • For an image based on RHEL 8, enter:

      FROM registry.access.redhat.com/ubi8/ubi:latest
      
      RUN yum module install -y go-toolset
      Copy to Clipboard Toggle word wrap
    • For an image based on RHEL 9, enter:

      FROM registry.access.redhat.com/ubi9/ubi:latest
      
      RUN yum install -y go-toolset
      Copy to Clipboard Toggle word wrap
    • For an image based on RHEL 10, enter:

      FROM registry.access.redhat.com/ubi10/ubi:latest
      
      RUN yum install -y go-toolset
      Copy to Clipboard Toggle word wrap

Chapter 6. Changes in Go Toolset 1.24

Go Toolset has been updated to version 1.24.4 with the release of the RHSA-2025:10677 advisory.

  • Language:

    • Generic type aliases are now fully supported, allowing type aliases to be parameterized for increased flexibility with generics.
  • Tools:

    • The Go module system supports tool directives in go.mod files, enabling direct management of executable dependencies.
    • The go build, go install, and go test commands now support the -json flag for structured output.
    • The new GOAUTH environment variable provides enhanced authentication for private modules.
  • Runtime and Performance:

    • Runtime improvements reduce CPU overhead by 2–3% on average.
    • Notable changes include a new map implementation based on Swiss Tables and more efficient memory allocation.
  • Standard Library:

    • The new os.Root type enables directory-limited filesystem access.
    • The testing.B.Loop method improves benchmarking.
    • The runtime.AddCleanup function provides a more flexible finalization mechanism.
    • The new weak package introduces weak pointers.
  • Cryptography:

    • New packages for ML-KEM post-quantum key exchange (crypto/mlkem), HKDF, PBKDF2, and SHA-3 are now available.
    • The Go Cryptographic Module is now under review for FIPS 140-3 certification.
  • Additional updates:

    • The vet tool includes a new analyzer for detecting common mistakes in tests and examples.
    • The objdump tool now supports more architectures.
    • Cgo introduces annotations for improved performance and correctness.

For more information, see the upstream release notes.

Go Toolset is a rolling Application Stream, and Red Hat supports only the latest version. For more information, see the Red Hat Enterprise Linux Application Streams Life Cycle document.

Legal Notice

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Back to top
Red Hat logoGithubredditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat Documentation

We help Red Hat users innovate and achieve their goals with our products and services with content they can trust. Explore our recent updates.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

Theme

© 2025 Red Hat