Go
mise can be used to install and manage multiple versions of go on the same system.
Usage
Select a Go release series for the current project:
mise use [email protected]
mise exec -- go versionUse mise use -g [email protected] for a personal default. mise ls-remote go lists available versions; mise upgrade go updates within the configured request.
Minor go versions 1.20 and below require specifying prefix before the version number because the first version of each series was released without a .0 suffix, making 1.20 an exact version match:
mise use go@prefix:1.20These instructions use mise's built-in go support. An installed external plugin with the same name can change the behavior; use mise plugins ls to check for overrides. See the core implementation for backend details.
.go-version file support
Enable Go's idiomatic files explicitly:
mise settings add idiomatic_version_file_enable_tools gomise can read .go-version or the toolchain goX.Y.Z declaration in go.mod. The go directive is a minimum compatibility requirement; reading it as a version request is deprecated.
Go also has its own toolchain selection, controlled by GOTOOLCHAIN and module/workspace declarations. It may use a different toolchain after mise starts it. Compare mise exec -- go version with mise exec -- go env GOTOOLCHAIN when investigating unexpected versions.
Default packages
Planned deprecation
Default package files are deprecated. They are still supported for now, but mise will start warning in 2026.11.0 and support will be removed in 2027.11.0.
For Go CLIs, install the tool directly with the go: backend:
[tools]
"go:github.com/jesseduffield/lazygit" = "latest"For packages that really should be installed into every Go version, use a tool-level postinstall hook:
[tools]
go = { version = "1.25", postinstall = "go install github.com/daixiang0/gci@latest" }mise can automatically install a default set of packages right after installing a new go version. To use this legacy feature, provide a $HOME/.default-go-packages file that lists one package per line, for example:
github.com/daixiang0/gci # allows comments
github.com/jesseduffield/lazygitTool Options
The following tool-options are available for the go backend. These options go in the [tools] section in mise.toml.
install_env
Set environment variables for default package installation and install-time verification commands run by the core go backend:
[tools]
go = { version = "latest", install_env = { GOPRIVATE = "github.com/acme/*" } }Settings
go.default_packages_filedeprecated
- Type:
string - Env:
MISE_GO_DEFAULT_PACKAGES_FILE - Default:
~/.default-go-packages - Deprecated: Default go package files are deprecated. Use tool-level postinstall hooks for packages that should be installed into every go version, or use the go: backend for CLI tools.
Path to a file containing default go packages to install when installing go.
go.download_mirror
- Type:
string - Env:
MISE_GO_DOWNLOAD_MIRROR - Default:
https://dl.google.com/go
Mirror to download go sdk tarballs from.
go.repo
- Type:
string - Env:
MISE_GO_REPO - Default:
https://github.com/golang/go
URL to fetch go from.
go.set_gobin
- Type:
boolean(optional) - Env:
MISE_GO_SET_GOBIN - Default:
None
Defaults to ~/.local/share/mise/installs/go/.../bin.
Set to true to override GOBIN if previously set.
Set to false to not set GOBIN (default is ${GOPATH:-$HOME/go}/bin).
go.set_gopathdeprecated
- Type:
boolean - Env:
MISE_GO_SET_GOPATH - Default:
false - Deprecated: mise no longer manages GOPATH. Set GOPATH in [env] if you need a specific value.
[deprecated] Set to true to set GOPATH=~/.local/share/mise/installs/go/.../packages.
go.set_goroot
- Type:
boolean - Env:
MISE_GO_SET_GOROOT - Default:
true
Sets GOROOT=~/.local/share/mise/installs/go/.../.
go.skip_checksum
- Type:
boolean - Env:
MISE_GO_SKIP_CHECKSUM - Default:
false
Set to true to skip checksum verification when downloading go sdk tarballs.