如何确认$GOPATH和$GOROOT设置正确?

Sep*_*eed 6 go

这不是这个问题的重复:

GOPATH 和 GOROOT 的值应该是多少?

我不想知道价值观应该是什么。我想知道当我输入ls $GOROOTls $GOPATH进入控制台时应该看到什么。我很确定我在大约一年前按照教程设置了错误,并且我希望能够通过简单地检查它们指向的内容是否正确来确认这两个指向它们应该指向的位置。

这就是我现在所在的地方。看起来好像$GOROOT没有指向任何地方。我很确定它应该指向,但如果我知道 的预期结果应该是usr/local/go什么,确认会容易得多。ls $GOROOT

至于$GOPATH我不完全确定我的“工作空间”是否是我所有的 go 代码所在的位置,或者可能只是 github 的东西,或者可能是我正在其中工作的特定文件夹。我知道它应该指向我的“工作空间”,但我不知道我正在寻找的工作空间是什么样的。

Sephs-MBP:ThumbzArt seph$ $GOROOT
Sephs-MBP:ThumbzArt seph$ $GOPATH
-bash: /Users/seph/code/golang: is a directory
Sephs-MBP:ThumbzArt seph$ ls $GOROOT
Bman.jpg            README.md           ThumbzArt.sublime-workspacescripts              thumbzart.go
LICENSE.md          ThumbzArt.sublime-project   public              templates           ticktock.go
Sephs-MBP:ThumbzArt seph$ $GOPATH
-bash: /Users/seph/code/golang: is a directory
Sephs-MBP:ThumbzArt seph$ ls $GOPATH
-   bin p   pkg src
Sephs-MBP:ThumbzArt seph$ ls /usr/local/go
AUTHORS     CONTRIBUTORS    PATENTS     VERSION     bin     doc     lib     pkg     src
CONTRIBUTING.md LICENSE     README.md   api     blog        favicon.ico misc        robots.txt  test
Sephs-MBP:ThumbzArt seph$ 
Run Code Online (Sandbox Code Playgroud)

我知道这个问题看起来很荒谬,但是很难确认没有预期结果的事情。

谢谢

Sephs-MBP:streak seph$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/seph/code/golang"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT=""
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

Sephs-MBP:streak seph$ go version
go version go1.5.2 darwin/amd64

Sephs-MBP:streak seph$ which go
/usr/local/go/bin/go
Run Code Online (Sandbox Code Playgroud)

Sep*_*eed -4

编辑:我刚刚偶然发现的另一个非常有用的功能是:go help gopath。这可能应该是有人的答案。

该文件夹$GOPATH指向应该是这样的:

Sephs-MBP:streak seph$ ls $GOPATH
-   bin p   pkg src
Run Code Online (Sandbox Code Playgroud)

$GOROOT另一方面,如果您使用ls $GOROOTas 与 相比,将会产生意想不到的结果ls $GOPATH。我认为这是因为$GOROOT它不是在这个背景下设定的。

Sephs-MBP:helloworld seph$ ls $GOROOT
helloworld.go
Run Code Online (Sandbox Code Playgroud)

如果你使用go env你就会看到它的真实本质$GOROOT

Sephs-MBP:streak seph$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/seph/code/golang"
GORACE=""
GOROOT="/usr/local/go"            //this is where it actually points
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT=""
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-    arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"
Run Code Online (Sandbox Code Playgroud)

$GOROOT如果你得到fromgo env和 do的结果,ls你应该看到这样的东西:

Sephs-MBP:streak seph$ ls /usr/local/go
AUTHORS     CONTRIBUTORS    PATENTS     VERSION     bin     doc         lib     pkg     src
CONTRIBUTING.md LICENSE     README.md   api     blog        favicon.ico misc        robots.txt  test
Run Code Online (Sandbox Code Playgroud)

如果所有这些事情都检查完毕,那么您的$GOPATH$GOROOT就设置正确了。

  • @0x434D53 是的,这就是发明 `echo $GOROOT` 的原因:-) (4认同)
  • 正如我上面所写:由于未设置“$GOROOT”,因此“ls $GOROOT”变为“ls”:它会打印您的工作目录。 (3认同)