187

我想从 github 安装包到我的$GOPATH,我试过这个:

go get github.com:capotej/groupcache-db-experiment.git

存储库在这里

4

3 回答 3

151

命令去

下载并安装软件包和依赖项

用法:

go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]

Get 下载由导入路径命名的包及其依赖项。然后它会安装命名的包,比如“go install”。

-d 标志指示 get 在下载包后停止;也就是说,它指示 get 不要安装这些软件包。

-f 标志仅在设置 -u 时有效,它强制 get -u 不验证每个包是否已从其导入路径所暗示的源代码控制存储库中签出。如果源是原始的本地分支,这将很有用。

-fix 标志指示 get 在解决依赖关系或构建代码之前对下载的包运行修复工具。

-insecure 标志允许从存储库中获取并使用 HTTP 等不安全方案解析自定义域。谨慎使用。

-t 标志指示 get 还下载为指定包构建测试所需的包。

-u 标志指示 get 使用网络来更新命名包及其依赖项。默认情况下,get 使用网络检查丢失的包,但不使用它来查找现有包的更新。

-v 标志启用详细进度和调试输出。

Get 还接受构建标志来控制安装。请参阅“帮助构建”。

签出新包时,get 创建目标目录 GOPATH/src/。如果 GOPATH 包含多个条目,则 get 使用第一个。有关更多详细信息,请参阅:'go help gopath'。

在签出或更新包时,get 会查找与本地安装的 Go 版本匹配的分支或标签。最重要的规则是,如果本地安装运行版本“go1”,get 搜索名为“go1”的分支或标签。如果不存在这样的版本,它将检索包的默认分支。

当 go get 签出或更新 Git 存储库时,它还会更新存储库引用的任何 git 子模块。

Get 从不签出或更新存储在供应商目录中的代码。

有关指定包的更多信息,请参阅“go help packages”。

有关“go get”如何找到要下载的源代码的更多信息,请参阅“go help importpath”。

本文描述了使用 GOPATH 管理源代码和依赖项时 get 的行为。如果 go 命令在模块感知模式下运行,则 get 的标志和效果的详细信息会发生变化,“go help get”也是如此。请参阅“go help modules”和“go help module-get”。

另请参阅:构建、安装、清理。


例如,显示详细输出,

$ go get -v github.com/capotej/groupcache-db-experiment/...
github.com/capotej/groupcache-db-experiment (download)
github.com/golang/groupcache (download)
github.com/golang/protobuf (download)
github.com/capotej/groupcache-db-experiment/api
github.com/capotej/groupcache-db-experiment/client
github.com/capotej/groupcache-db-experiment/slowdb
github.com/golang/groupcache/consistenthash
github.com/golang/protobuf/proto
github.com/golang/groupcache/lru
github.com/capotej/groupcache-db-experiment/dbserver
github.com/capotej/groupcache-db-experiment/cli
github.com/golang/groupcache/singleflight
github.com/golang/groupcache/groupcachepb
github.com/golang/groupcache
github.com/capotej/groupcache-db-experiment/frontend
$ 
于 2015-05-18T05:59:41.940 回答
111

首先,我们需要 GOPATH

$GOPATH是一个由其环境变量指定的文件夹(或一组文件夹)。我们必须注意,这不是$GOROOT安装 Go 的目录。

export GOPATH=$HOME/gocode
export PATH=$PATH:$GOPATH/bin

我们使用~/gocode计算机中的路径来存储应用程序的源代码及其依赖项。该GOPATH目录还将存储其软件包的二进制文件。

然后检查 Go env

你的系统必须有$GOPATHand $GOROOT,下面是我的环境:

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/elpsstu/gocode"
GORACE=""
GOROOT="/home/pravin/go"
GOTOOLDIR="/home/pravin/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

现在,您运行下载 go 包:

go get [-d] [-f] [-fix] [-t] [-u] [build flags] [packages]

下载并安装由导入路径命名的包及其依赖项。有关更多详细信息,您可以查看此处

于 2015-05-18T04:50:02.710 回答
30

请注意,由于不推荐使用 Go 1.17go get安装

不推荐使用 get 构建和安装软件包。在未来的版本中,该-d标志将默认启用,并且go get仅用于调整当前模块的依赖关系。要使用当前模块中的依赖项安装包,请使用go install.

如发行说明草案中所述,此“未来版本”被确认为 Go 1.18 :

go get不再以模块感知模式构建或安装包。go get现在致力于调整 go.mod 中的依赖关系。实际上,该-d标志始终处于启用状态。

(该-d标志指示go get仅下载软件包而不安装它们。)

改用go install

# Install the latest version of a program,
# ignoring go.mod in the current directory (if any).
$ go install golang.org/x/tools/gopls@latest

# Install a specific version of a program.
$ go install golang.org/x/tools/gopls@v0.6.4

# Install a program at the version selected by the module in the current directory.
$ go install golang.org/x/tools/gopls

# Install all programs in a directory.
$ go install ./cmd/...

Go 1.18 草案发行说明还提到go get将像以前一样与GO111MODULE=off. 但是,在 2021 年,您绝对应该迁移到模块并go install改为使用。

于 2021-08-16T21:36:12.277 回答