I'm trying to follow a simple Hello, World
application in go:
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!")
}
But when I build and run it, I get the following error:
main.go:5:2: cannot find package "fmt" in any of:
/home/user/go/src/pkg/fmt (from $GOROOT)
/home/user/gocode/src/fmt (from $GOPATH)
package test_program
imports runtime: cannot find package "runtime" in any of:
/home/user/go/src/pkg/runtime (from $GOROOT)
/home/user/gocode/src/runtime (from $GOPATH)
Here is the ouput of go env
:
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/user/gocode"
GORACE=""
GOROOT="/home/user/go"
GOTOOLDIR="/home/user/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"
Unset GOROOT - the go tools know where they are supposed to be and you rarely need to set it.
You've set it to /home/user/go
and unless you build go in there that is unlikely to be the right place to find the fmt package.
Don't use apt-get
for installing go, just download the binaries and extract them to your home (or any) directory.
To get the go tool
available in your terminal, you have to add the export PATH=$PATH:$GOROOT/bin
line to your ~/.bashrc
.
After failed run go run case.go
command. I try to use apt installation in a new ubuntu 16.04 environment.
apt install golang
after this, the go run case.go
will run as expected.
I guess the problem is you should never set the GOROOT.
Once you find the GOROOT is not something like "/usr/lib/go-{version}",
you already in the wrong situation. use unset GOROOT
immediately. add it to /etc/profile
or ~/profile
or ~/.bashrc
etc. for permanent effection.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With