2016-11-30 27 views
3

當我運行go install時,我的一些軟件包位於%GOPATH%\src中,它將被安裝到%GOPATH%\pkg什麼規則決定Go包的安裝位置?

我讀到%GOROOT%%GOPATH%文件夾有類似的組織。所以我嘗試go install cmd\cgo%GOROOT%\src\cmd\cgo包,它是golang安裝的一部分。但最後的cgo.exe安裝到%GOROOT%\pkg\tool\

我檢查了cmd\cgo文件夾中的所有*.go文件。他們都有一個package main聲明。所以我期待最後的cgo.exe被安裝到%GOROOT%\bin

我的問題是:

  • 爲什麼cgo.exe安裝到pkg而非bin
  • pkg\tool中的tool部分來自哪裏?我可以爲自己的包做類似的事嗎?
+0

那怎麼去工具工作的,你不能爲你自己的代碼做到這一點。 stdlib和std工具的處理方式不同。 – Volker

+0

相關:[爲什麼在運行'go get golang.org/x/tools/cmd/godoc'?](http://stackoverflow.com/questions/33118766/why-is-there-no-二進制創建時運行go-get-golang-org-x-tools-cmd-godoc/33119819#33119819) – icza

回答

3

go build命令依賴於一展身手工具目錄下,建立工具安裝(compile.exelink.exe,...)。

而且ToolDir被定義爲:

var ToolDir = filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) 

因此,任何構建工具是%GOROOT%\pkg\tool\

+0

Go如何處理'/'和'\'之間的轉換? –

+1

@GregoryNisbet與https://golang.org/pkg/path/filepath/#FromSlash。另外:http://stackoverflow.com/a/12132445/6309 – VonC

+0

如果有疑問,請使用正斜槓'/',它適用於包括Windows在內的POSIX文件系統。 –