我怎样用go get安装一个软件包?

50pmv0ei  于 2023-03-21  发布在  Go
关注(0)|答案(4)|浏览(165)

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

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

存储库是here

pu82cl6c

pu82cl6c1#

Command go
下载并安装软件包和依赖项
用法:

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

Get下载由导入路径命名的包,沿着它们的依赖项,然后安装命名的包,就像“go install”一样。
d标志指示get在下载包后停止;即指示get不安装包。
-f标志只有在设置了-u时才有效,它强制get -u不验证每个包是否已经从其导入路径所暗示的源代码控制库中 checkout 。如果源代码是原始包的本地分支,这将非常有用。
fix标志指示get在解析依赖项或生成代码之前对下载的包运行修复工具。

  • unsecure标志允许使用不安全的方案(如HTTP)从存储库中提取和解析自定义域。请谨慎使用。
    t标志指示get还下载为指定包构建测试所需的包。
    -u标志指示get使用网络更新指定的包及其依赖项。默认情况下,get使用网络 checkout 丢失的包,但不使用网络查找现有包的更新。
    v标志启用详细进度和调试输出。
    Get还接受生成标志以控制安装。请参阅“go help build”。
    checkout 新包时,get将创建目标目录GOPATH/src/。如果GOPATH包含多个条目,get将使用第一个条目。有关详细信息,请参阅:“去帮哥帕斯”
    当 checkout 或更新一个软件包时,get会查找与本地安装的Go版本相匹配的分支或标签,最重要的规则是,如果本地安装运行的是“go 1”版本,get会查找名为“go 1”的分支或标签,如果不存在这样的版本,它会检索软件包的默认分支。
    当go get checkout 或更新Git仓库时,它也会更新仓库引用的所有git子模块。
    Get从不 checkout 或更新存储在供应商目录中的代码。
    有关指定软件包的详细信息,请参阅“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
$
nr9pn0ug

nr9pn0ug2#

首先,我们需要GOPATH

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

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

我们在计算机中使用~/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"

现在,运行下载go包:

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

下载并安装由导入路径命名的包沿着依赖项。有关详细信息,请查看此处。

k5ifujac

k5ifujac3#

请注意,由于Go 1.17不推荐使用go get安装包:
不推荐使用get生成和安装程序包。在将来的版本中,默认情况下将启用-d标志,并且go get将仅用于调整当前模块的依赖项。要使用当前模块的依赖项安装程序包,请使用go install
这个“未来版本”是Go 1.18,正如发行说明中提到的:
go get不再以模块感知模式构建或安装软件包。go get现在专门用于调整go.mod中的依赖关系。实际上,-d标志始终处于启用状态。
(The -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 install <package_name>@<version>

(you可以省略版本后缀@<version>,例如@latest
Go语言1.18的发行说明中也提到go get可以像以前一样使用GO111MODULE=off,但是在2022年你应该迁移到模块中,使用go install

odopli94

odopli944#

从控制台运行

go mod download

相关问题