如何使用 go get 安装软件包?
How can I install a package with go get?
我想将 github 中的软件包安装到我的 $GOPATH
,我试过这个:
go get github.com:capotej/groupcache-db-experiment.git
存储库是 here。
首先,我们需要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]
Get 下载并安装由导入路径命名的包及其依赖项。更多详情可以查看here。
Download and install packages and dependencies
Usage:
go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]
Get downloads the packages named by the import paths, along with their
dependencies. It then installs the named packages, like 'go install'.
The -d flag instructs get to stop after downloading the packages; that
is, it instructs get not to install the packages.
The -f flag, valid only when -u is set, forces get -u not to verify
that each package has been checked out from the source control
repository implied by its import path. This can be useful if the
source is a local fork of the original.
The -fix flag instructs get to run the fix tool on the downloaded
packages before resolving dependencies or building the code.
The -insecure flag permits fetching from repositories and resolving
custom domains using insecure schemes such as HTTP. Use with caution.
The -t flag instructs get to also download the packages required to
build the tests for the specified packages.
The -u flag instructs get to use the network to update the named
packages and their dependencies. By default, get uses the network to
check out missing packages but does not use it to look for updates to
existing packages.
The -v flag enables verbose progress and debug output.
Get also accepts build flags to control the installation. See 'go help
build'.
When checking out a new package, get creates the target directory
GOPATH/src/. If the GOPATH contains multiple entries, get
uses the first one. For more details see: 'go help gopath'.
When checking out or updating a package, get looks for a branch or tag
that matches the locally installed version of Go. The most important
rule is that if the local installation is running version "go1", get
searches for a branch or tag named "go1". If no such version exists it
retrieves the default branch of the package.
When go get checks out or updates a Git repository, it also updates
any git submodules referenced by the repository.
Get never checks out or updates code stored in vendor directories.
For more about specifying packages, see 'go help packages'.
For more about how 'go get' finds source code to download, see 'go
help importpath'.
This text describes the behavior of get when using GOPATH to manage
source code and dependencies. If instead the go command is running in
module-aware mode, the details of get's flags and effects change, as
does 'go help get'. See 'go help modules' and 'go help module-get'.
See also: 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
$
请注意,由于 Go 1.17 使用 go get
安装软件包是 deprecated:
Building and installing packages with get is deprecated. In a future release, the -d
flag will be enabled by default, and go get
will be only be used to adjust dependencies of the current module. To install a package using dependencies from the current module, use go install
.
这个“未来版本”是 Go 1.18,如前所述 in the release notes:
go get
no longer builds or installs packages in module-aware mode. go get
is now dedicated to adjusting dependencies in go.mod. Effectively, the -d
flag is always enabled.
(-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
我想将 github 中的软件包安装到我的 $GOPATH
,我试过这个:
go get github.com:capotej/groupcache-db-experiment.git
存储库是 here。
首先,我们需要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]
Get 下载并安装由导入路径命名的包及其依赖项。更多详情可以查看here。
Download and install packages and dependencies
Usage:
go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]
Get downloads the packages named by the import paths, along with their dependencies. It then installs the named packages, like 'go install'.
The -d flag instructs get to stop after downloading the packages; that is, it instructs get not to install the packages.
The -f flag, valid only when -u is set, forces get -u not to verify that each package has been checked out from the source control repository implied by its import path. This can be useful if the source is a local fork of the original.
The -fix flag instructs get to run the fix tool on the downloaded packages before resolving dependencies or building the code.
The -insecure flag permits fetching from repositories and resolving custom domains using insecure schemes such as HTTP. Use with caution.
The -t flag instructs get to also download the packages required to build the tests for the specified packages.
The -u flag instructs get to use the network to update the named packages and their dependencies. By default, get uses the network to check out missing packages but does not use it to look for updates to existing packages.
The -v flag enables verbose progress and debug output.
Get also accepts build flags to control the installation. See 'go help build'.
When checking out a new package, get creates the target directory GOPATH/src/. If the GOPATH contains multiple entries, get uses the first one. For more details see: 'go help gopath'.
When checking out or updating a package, get looks for a branch or tag that matches the locally installed version of Go. The most important rule is that if the local installation is running version "go1", get searches for a branch or tag named "go1". If no such version exists it retrieves the default branch of the package.
When go get checks out or updates a Git repository, it also updates any git submodules referenced by the repository.
Get never checks out or updates code stored in vendor directories.
For more about specifying packages, see 'go help packages'.
For more about how 'go get' finds source code to download, see 'go help importpath'.
This text describes the behavior of get when using GOPATH to manage source code and dependencies. If instead the go command is running in module-aware mode, the details of get's flags and effects change, as does 'go help get'. See 'go help modules' and 'go help module-get'.
See also: 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
$
请注意,由于 Go 1.17 使用 go get
安装软件包是 deprecated:
Building and installing packages with get is deprecated. In a future release, the
-d
flag will be enabled by default, andgo get
will be only be used to adjust dependencies of the current module. To install a package using dependencies from the current module, usego install
.
这个“未来版本”是 Go 1.18,如前所述 in the release notes:
go get
no longer builds or installs packages in module-aware mode.go get
is now dedicated to adjusting dependencies in go.mod. Effectively, the-d
flag is always enabled.
(-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