Ok, So I've downloaded Go 1.1 and put it into $HOME/Documents/go.
Then, I've modified my .bashrc
to be:
export GOPATH=$HOME/Documents/go
export GOROOT=$GOPATH
export GOARCH=amd64
export GOOS=linux
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
Than I've sourced the .bashrc
, and tried:
jan@janpc:~$ go version
go version go1.1 linux/amd64
But I can't get it to compile or install any dependencies. Eg. I try to run my little test program:
jan@janpc:~/Documents/go/src/github.com/jan/scrypt$ go run scrypt.go
warning: GOPATH set to GOROOT (/home/jan/Documents/go) has no effect
scrypt.go:9:3: cannot find package "github.com/dchest/scrypt" in any of:
/home/jan/Documents/go/src/pkg/github.com/dchest/scrypt (from $GOROOT)
($GOPATH not set)
jan@janpc:~/Documents/go/src/github.com/jan/scrypt$
And when I try to install dependencies:
jan@janpc:~/Documents/go/src/github.com/jan/scrypt$ go get "github.com/dchest/scrypt"
warning: GOPATH set to GOROOT (/home/jan/Documents/go) has no effect
package github.com/dchest/scrypt: cannot download, $GOPATH must not be set to $GOROOT. For more details see: go help gopath
It compiles and works fine on mac. I can't figure out whats wrong with my config, if I try to remove $GOROOT
or $GOPATH
nothing works, and I don't know what else to set them to, other than the path to Go.
EDIT:
There is no $GOROOT set on my mac. But if I remove $GOROOT
on ubuntu, I get bunch of errors like these when I try to compile.
cannot find package "fmt" in any of:
/usr/local/go/src/pkg/fmt (from $GOROOT)
/home/jan/Documents/go/src/fmt (from $GOPATH)
Your enviroment variable you've set by
is a mistake. Nowhere is such setting required nor recommended. Actually, it cripples the environment seen by the Go build system.
Remove that setting, recreate your environment (
. bashrc
) or open a new terminal and it should work (if no other problems exists).Additionally, if you're not cross compiling, I recommend to remove also these:
In short, proper exported GOPATH is the only environment variable which is, in the first approximation, really needed. Some more hints here.
EDIT: Okay, so I've downloaded the binary distribution (go1.1.linux-amd64.tar.gz). Quoting from README:
From this it's clear that you must have not followed properly the above instructions. Fix that and I hope it will work for you then.
To install go it is CRITICAL to first remove prior install (or you will get errors go build fails : runtime/mstkbar.go:151:10: debug.gcstackbarrieroff undefined)
Verify whether go is still installed
typical output if go is installed
if go is installed remove it
download the latest tarball https://golang.org/dl/ expand and install
define these environment variables in your ~/.bashrc
source your above new env var definitions
verify install
if installed correctly typical output
--- install is complete so lets compile a hello world ---
now paste following to create the go source file hello_world.go
compile your source code
to understand how to structure your go source code see https://golang.org/doc/code.html
Fix the missing package error
You also asked how to fix the missing dependency errors ... for example
above error will happen even after your go install is setup OK ... just issue this to download and install the missing upstream dependency go packages (and the ones they might also reference recursively)
TLDR: Unset
$GOROOT
by running following command in your terminalexport GOROOT=""
I had Go installed on Ubuntu 16.04 and everything was working fine.
Then by mistake I set the
$GOROOT
to$GOPATH
following a tutorial, at which point my build started to fail saying:Every solution I read was suggesting to not set this variable, and I wanted to unset this. I found the following fix to get it unset:
export GOROOT=""
in bash.Having unset the
$GOROOT
back to empty which was recommended by everyone so go defaulted back to original path. And it fixed the issue for me and go build started to work again.You should not set $GOROOT for normal installations.
Just type
export GOROOT=""
and it should fix your problem.