Managing multiple Go versions with direnv

Install direnv

$ brew install direnv

Add to your shell

https://direnv.net/docs/hook.html

Create .envrc

GO={path to go version you want to use}
# If you use Homebrew
# GO=/opt/homebrew/Cellar/go@1.20/1.20.7/bin/go
export GOROOT="$($GO env GOROOT)"

PATH_rm '/opt/homebrew/Cellar/go*' # remove other versions
PATH_add "$($GO env GOROOT)/bin"

# use version specific GOPATH
export GOPATH=$HOME/go1.20
export PATH=$PATH:$GOPATH/bin

Allow .envrc

$ direnv allow

or allow prefix by setting up ~/.config/direnv/direnv.toml

[whitelist]
prefix = ["{path to your workspace}"]

CAUTION: This allows execution of .envrc in all sub-directories.