如何使用go get安装包?

我想从github安装包到我的$GOPATH,我已经尝试过了:

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

存储库是在这里

511849 次浏览

首先,我们需要GOPATH

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

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

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

然后检查Go env

你的系统必须有$GOPATH$GOROOT,下面是我的Env:

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"

现在,你运行download go package:

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

Get下载并安装按导入路径命名的包及其依赖项。要了解更多细节,你可以查看在这里

命令go . sh . sh

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

用法:

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

Get下载按导入路径命名的包,以及它们的 依赖关系。然后它会安装命名的包,比如'go install'

-d标志指示get在下载包后停止;那 是,它指示get不安装包。

-f标志,仅在设置-u时有效,强制get -u不进行验证 每个包都已从源代码控制中签出 由其导入路径暗示的存储库。这可能是有用的,如果

. Source是原始的本地fork

-fix标志指示get在下载的文件上运行修复工具

-insecure标志允许从存储库读取和解析 使用不安全方案(如HTTP)的自定义域。

.慎用

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

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

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

Get也接受构建标志来控制安装。See 'go help 构建”。< / p > 当签出一个新包时,get创建目标目录 GOPATH / src /。如果GOPATH包含多个条目,请获取 使用第一个。更多详细信息见:'go help gopath'.

当检出或更新包时,get查找分支或标记 匹配本地安装的Go版本。最重要的 规则是,如果本地安装运行的版本为“go1”,则get 搜索名为“go1”的分支或标记。如果不存在这样的版本 获取包的默认分支 当go get签出或更新Git存储库时,它也会更新 由存储库引用的任何git子模块

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

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

更多关于“go get”如何找到源代码下载,请参阅“go” 帮助importpath”。< / p >

描述使用GOPATH进行管理时get的行为 源代码和依赖关系。如果相反,go命令正在运行 在模块感知模式下,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
$

注意,由于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/...

Go 1.18发布说明还提到go get将像以前一样与GO111MODULE=off一起工作。然而,在2022年,你肯定应该迁移到模块,转而使用go install

从控制台运行

go mod download