如何使用go get安装软件包?

rog*_*ger 101 github go

我想从github安装软件包到我的gopath,我试过这个:

go get github.com:capotej/groupcache-db-experiment.git
Run Code Online (Sandbox Code Playgroud)

存储库在这里.

pet*_*rSO 103

命令去

下载并安装包和依赖项

用法:

go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]
Run Code Online (Sandbox Code Playgroud)

获取导入路径指定的包及其依赖项的下载.然后安装命名包,比如'go install'.

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

-f标志仅在设置-u时有效,强制get -u不验证每个包是否已从其导入路径隐含的源控制存储库中检出.如果源是原始的本地分支,这可能很有用.

-fix标志指示get在解析依赖项或构建代码之前在下载的包上运行修复工具.

-insecure标志允许从存储库中提取并使用不安全的方案(如HTTP)解析自定义域.谨慎使用.

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

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

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

Get还接受构建标志来控制安装.请参阅'go help build'.

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

签出或更新包时,查找与本地安装的Go版本匹配的分支或标记.最重要的规则是,如果本地安装运行版本为"go1",则搜索名为"go1"的分支或标记.如果不存在此类版本,则会检索包的默认分支.

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

永远不会检出或更新存储在供应商目录中的代码.

有关指定包的更多信息,请参阅"go help packages".

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

本文描述了使用GOPATH管理源代码和依赖项时get的行为.如果go命令在模块感知模式下运行,则get的标志和效果的细节会发生变化,就像'go help get'一样.请参阅"go help modules"和"go help module-get".

另见:go build,go install,go clean.


例如,显示详细输出,

$ 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
$ 
Run Code Online (Sandbox Code Playgroud)

  • 如果这有助于任何人,我的问题的解决方案(`github.com/coreos/go-iptables.git:github.com/ path`中的无效版本控制后缀)是从Github URL中删除`.git`后缀. (14认同)
  • 一旦你使用了`go get`,你如何运行它? (7认同)
  • `-v`做什么? (6认同)
  • 喜欢如何在该列表中引用`-v`命令lol fml ...当然这意味着*详细*tho (3认同)
  • @yuyangJian它意味着详细的输出. (2认同)

bla*_*een 93

请注意,自 Go 1.17 起,go 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/...
Run Code Online (Sandbox Code Playgroud)

要安装任何其他软件包,只需:

go install <package_name>@<version>
Run Code Online (Sandbox Code Playgroud)

(您可以省略版本后缀@<version>,例如@latest


Go 1.18 发行说明还提到它将go get像以前一样与GO111MODULE=off. 然而,在 2022 年,您绝对应该迁移到模块并使用go install

  • 我尝试安装 gophernotes。`go install github.com/gopherdata/gophernotes@latest` 工作正常。 (7认同)

Pra*_*hra 66

首先,我们需要GOPATH

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

export GOPATH=$HOME/gocode
export PATH=$PATH:$GOPATH/bin
Run Code Online (Sandbox Code Playgroud)

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

然后检查Go env

你的系统必须有$ GOPATH和$ 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"
Run Code Online (Sandbox Code Playgroud)

现在,您运行download go package:

go get [-d] [-f] [-fix] [-t] [-u] [build flags] [packages]
Run Code Online (Sandbox Code Playgroud)

获取下载并安装导入路径命名的软件包及其依赖项.有关详细信息,请查看此处.

  • 从 Go v1.8 开始,如果未设置,`GOPATH` 默认为 `$HOME/go`。来源[1](https://golang.org/doc/go1.8#gopath),[2](/sf/answers/2525877301/)。 (7认同)