34

This is not a programming question.

I have a machine running Ubuntu, and I installed Golang on it. It was working fine... I even ran a few programs, but the "go1.11.2.linux-amd64.tar.gz" file was in my home directory so I thought it would be okay to move it to the Downloads directory. After moving it, I can't use any Go command, and I get command 'go' not found. I tried moving the file back to the home directory, but I'm still getting the same error.

Can anybody explain to me what's going on? Thanks!!

richie@richie-ThinkPad-T430:~$ go version

Command 'go' not found, but can be installed with:

sudo snap install go         # version 1.11.2, or
sudo apt  install golang-go
sudo apt  install gccgo-go 

See 'snap info go' for additional versions.

The commands I used to install Go :

wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.11.2.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
source ~/.profile
richie
  • 445

9 Answers9

43

Jos in the comments above is likely correct. You need to add the change to PATH in your .profile. From the install doc (emphasis added):

Add /usr/local/go/bin to the PATH environment variable. You can do this by adding this line to your /etc/profile (for a system-wide installation) or $HOME/.profile:

export PATH=$PATH:/usr/local/go/bin
16

From: Installed golang still go: command not found #20

Use this command:

sudo apt update && sudo apt install golang
wjandrea
  • 14,504
10

Use nano ~/.profile to edit the file and add the following:

export PATH=$PATH:/usr/local/go/bin

Save the file using the command source ~/.profile. Check the version:go version

Kevin Bowen
  • 20,055
  • 57
  • 82
  • 84
sree
  • 121
3

Try adding the exact export command to the ~/.bashrc file.

You need to source the ~/.bashrc file for changes to take place in your current terminal. From next time onward whenever you open a terminal, you should be able to find the go command. This worked for me.

Eliah Kagan
  • 119,640
3

One line command to install go,

[ ! -d "/usr/local/go" ] && cd /tmp && wget https://go.dev/dl/go1.17.4.linux-amd64.tar.gz && tar -C /usr/local/ -xzf go1.17.4.linux-amd64.tar.gz && cd /usr/local/ && echo "export PATH=\$PATH:/usr/local/go/bin:\$HOME/go/bin" >> ~/.bashrc && echo "export GOROOT=/usr/local/go" >> ~/.bashrc && echo "export PATH=\$PATH:/usr/local/go/bin:\$HOME/go/bin" >> /home/*/.bashrc && echo "export GOROOT=/usr/local/go" >> /home/*/.bashrc && source ~/.bashrc && source /home/*/.bashrc

Note: Run rm /usr/local/go before running this code if it is not working. It will install it for the user you are logged in.

Command explanation (for those who wants to know, so you can edit it if you want):

  1. [ ! -d "/usr/local/go" ] to check if go already downloaded. If it is already there the command will not work. You need to run rm /usr/local/go to make it working.
  2. cd /tmp && wget https://go.dev/dl/go1.17.4.linux-amd64.tar.gz to move to tmp directory and download go binary.
  3. tar -C /usr/local/ -xzf go1.17.4.linux-amd64.tar.gz to unzip the downloaded tar file to installation directory /usr/local
  4. cd /usr/local/ && echo "export PATH=\$PATH:/usr/local/go/bin:\$HOME/go/bin" >> ~/.bashrc && echo "export GOROOT=/usr/local/go" >> ~/.bashrc && echo "export PATH=\$PATH:/usr/local/go/bin:\$HOME/go/bin" >> /home/*/.bashrc && echo "export GOROOT=/usr/local/go" >> /home/*/.bashrc && source ~/.bashrc && source /home/*/.bashrc to set GOPATH and GOROOT for bash terminal.
3

To leverage Ubuntu/Debian ecosystem (instead editing paths by hand) one can install any version of golang-*-go for example:

sudo apt install golang-1.20-go

and then configure it as default:

sudo update-alternatives --install /usr/local/bin/go go /usr/lib/go-1.20/bin/go 1

Or in the OPs case when go is installed with wget under different path:

sudo update-alternatives --install /usr/local/bin/go go /usr/local/go/bin/go 1

That way you can even install and configure multiple versions and then select which one you prefer, for example:

sudo update-alternatives --config go    
There are 2 choices for the alternative go (providing /usr/local/bin/go).

Selection Path Priority Status

  • 0 /usr/lib/go-1.20/bin/go 1 auto mode 1 /usr/lib/go-1.18/bin/go 1 manual mode 2 /usr/lib/go-1.20/bin/go 1 manual mode

Press <enter> to keep the current choice[*], or type selection number:

This is system wide solution, will work for all users, "survives" restarts etc.

suside
  • 692
  • 7
  • 11
2

Make sure that the GOPATH environment variable is set to /usr/local/bin.

Eliah Kagan
  • 119,640
0

Whilst running

export PATH=$PATH:/usr/local/go/bin

will make it work, its not persistent accross terminal instances.

I fixed this by editing the ~/.profile file (which runs after after a login)

adding

# set PATH so it includes golang bin if it exists
if [ -d "/usr/local/go/bin" ] ; then
    PATH="/usr/local/go/bin:$PATH"
fi

I know this is similar to other answers, but I feel this is a safer code snippet as it checks the folder exists before adding it to the path.

Clint
  • 196
  • 2
  • 8
0

Another possible issue is that you downloaded the wrong file.

For instance, in my first try, I downloaded go1.23.4.src.tar.gz (and adapted the tar -C /usr/local -xzf go1.23.yadayadayada command) instead of using the file go1.23.4.linux-amd64.tar.gz

It's embarassing, but mentioning this might save some people some time.

Taylor
  • 159