


Is it possible to have multiple versions of Go installed at the same time?
Jun 25, 2025 pm 07:51 PMYes, multiple Go versions can be installed on the same machine. It can be easily implemented using version management tools such as gvm or goenv. Gvm supports package collections, which are suitable for cross-environment testing, while goenv is similar to rbenv and is easy to operate. After installation, version switching is performed through commands such as gvm install go1.20 and gvm use go1.20, and the default version is set. If you do not use the tools, you can manually install different versions to separate directories and switch by modifying the PATH environment variables, such as configuring the shell alias go120 and go121 to quickly switch. Regardless of the method, you should confirm the currently used version through go version and check the Go binary path in the IDE to avoid conflicts.
Yes, it's absolutely possible to have multiple versions of Go installed on the same machine. In fact, this is pretty common, especially when working on different projects that rely on specific Go versions.

The key is managing them properly so you don't run into conflicts or confusion.

Use a Version Manager Like gvm
or goenv
Managing multiple Go versions manually can get messy. That's where tools like gvm
(Go Version Manager) or goenv
come in handy — they let you install and switch between versions easily.
-
gvm
is more feature-rich and supports package sets, which can be useful if you're testing builds across environments. -
goenv
works similarly torbenv
for Ruby, making version switching straightforward.
Installation steps vary slightly depending on your OS, but most involve running a script or installing via Homebrew (on macOS).

Once installed, commands like:
gvm install go1.20 gvm use go1.20
...will handle the switching.
Make sure to set a default version for new shells so you're not always specifying it manually.
Install Versions Manually Without a Manager
If you'd rather keep things minimal, you can also install multiple Go versions directly from the official source:
- Download and extract each version into separate directories like
/usr/local/go1.20
,/usr/local/go1.21
, etc. - Update your
PATH
environment variable based on which version you want to use.
You can create shell aliases or scripts to swap between them quickly. For example, a simple alias in your .bashrc
or .zshrc
:
alias go120='export PATH=/usr/local/go1.20/bin:$PATH' alias go121='export PATH=/usr/local/go1.21/bin:$PATH'
Then just run go120
or go121
before working on a project.
This method gives you full control but requires a bit more maintenance.
Check Your Current Go Version Easy
No matter how you manage versions, always verify which one you're using with:
go version
It's easy to forget which version you've got active, especially after rebooting or opening a new terminal window. Adding the current Go version to your shell prompt (like how pyenv
shows Python versions) can help avoid surprises.
Also, some IDEs or editors might use their own Go setup, so double-check settings in VS Code, GoLand, or whatever tool you're using to make sure they point to the right binary.
That's basically all there is to it. Multiple Go versions coexist just fine — it's just about having the right tools and habits in place.
The above is the detailed content of Is it possible to have multiple versions of Go installed at the same time?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

In Go language, calling a structure method requires first defining the structure and the method that binds the receiver, and accessing it using a point number. After defining the structure Rectangle, the method can be declared through the value receiver or the pointer receiver; 1. Use the value receiver such as func(rRectangle)Area()int and directly call it through rect.Area(); 2. If you need to modify the structure, use the pointer receiver such as func(r*Rectangle)SetWidth(...), and Go will automatically handle the conversion of pointers and values; 3. When embedding the structure, the method of embedded structure will be improved, and it can be called directly through the outer structure; 4. Go does not need to force use getter/setter,

In Go, an interface is a type that defines behavior without specifying implementation. An interface consists of method signatures, and any type that implements these methods automatically satisfy the interface. For example, if you define a Speaker interface that contains the Speak() method, all types that implement the method can be considered Speaker. Interfaces are suitable for writing common functions, abstract implementation details, and using mock objects in testing. Defining an interface uses the interface keyword and lists method signatures, without explicitly declaring the type to implement the interface. Common use cases include logs, formatting, abstractions of different databases or services, and notification systems. For example, both Dog and Robot types can implement Speak methods and pass them to the same Anno

Go's time package provides functions for processing time and duration, including obtaining the current time, formatting date, calculating time difference, processing time zone, scheduling and sleeping operations. To get the current time, use time.Now() to get the Time structure, and you can extract specific time information through Year(), Month(), Day() and other methods; use Format("2006-01-0215:04:05") to format the time string; when calculating the time difference, use Sub() or Since() to obtain the Duration object, and then convert it into the corresponding unit through Seconds(), Minutes(), and Hours();

InGo,ifstatementsexecutecodebasedonconditions.1.Basicstructurerunsablockifaconditionistrue,e.g.,ifx>10{...}.2.Elseclausehandlesfalseconditions,e.g.,else{...}.3.Elseifchainsmultipleconditions,e.g.,elseifx==10{...}.4.Variableinitializationinsideif,l

Gohandlesconcurrencyusinggoroutinesandchannels.1.GoroutinesarelightweightfunctionsmanagedbytheGoruntime,enablingthousandstorunconcurrentlywithminimalresourceuse.2.Channelsprovidesafecommunicationbetweengoroutines,allowingvaluestobesentandreceivedinas

A switch statement in Go is a control flow tool that executes different code blocks based on the value of a variable or expression. 1. Switch executes corresponding logic by matching cases, and does not support the default fall-through; 2. The conditions can be omitted and Boolean expressions are used as case judgment; 3. A case can contain multiple values, separated by commas; 4. Support type judgment (typeswitch), which is used to dynamically check the underlying types of interface variables. This makes switch easier and more efficient than long chain if-else when dealing with multi-condition branches, value grouping and type checking.

Use bit operators to operate specific bits of integers in Go language, suitable for processing flag bits, underlying data, or optimization operations. 1. Use & (bit-wise) to check whether a specific bit is set; 2. Use

The standard way to protect critical areas in Go is to use the Lock() and Unlock() methods of sync.Mutex. 1. Declare a mutex and use it with the data to be protected; 2. Call Lock() before entering the critical area to ensure that only one goroutine can access the shared resources; 3. Use deferUnlock() to ensure that the lock is always released to avoid deadlocks; 4. Try to shorten operations in the critical area to improve performance; 5. For scenarios where more reads and less writes, sync.RWMutex should be used, read operations through RLock()/RUnlock(), and write operations through Lock()/Unlock() to improve concurrency efficiency.
