Golang中如何下载文件?
Golang中如何下载文件?
我想知道当我设置了 GOPATH 时,go get 会在哪里下载并存放文件?
当使用 GO111MODULE=on 时,go get 是仍然下载文件还是仅基于 go.mod 文件进行缓存?对缓存不太熟悉,这些缓存的文件在我关闭机器后会消失吗?
谢谢
rot13:
来自 Go 维基文档。
FileTreeDocumentation (约 go1.9.2 版本)
Modules (约 Go 1.11 版本)
重新阅读了文档,确实,我们仍然需要配置 GOBIN/GOPATH。目前还没有关于取消 GOPATH 的新更新。
更多关于Golang中如何下载文件?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
rot13:
Wiki页面标题已更改†,因此URL也发生了变化。
FileTreeDocumentation(旧)
FileTree(新)† 官方不鼓励这种做法
进行了一些不重要的排版改进,并添加了指向模块页面的链接。
不用担心,原帖作者有另一个讨论串,并且已经了解“Go模块与GOPATH”的发展情况以及如何处理它们。
就所有文档而言,我们仍然需要设置GOPATH。即使是安装指南仍然要求新设置配置GOPATH(下载和安装 - Go编程语言)。
引用:
GOPATH and Modules
When using modules, GOPATH is no longer used for resolving imports. However, it is still used to store downloaded source code (in GOPATH/pkg/mod) and compiled commands (in GOPATH/bin).
我想知道当我设置
GOPATH时,go get会在哪里下载并存放文件?
go get 会下载并安装到 GOBIN 目录。如果设置了 GOPATH 但没有设置 GOBIN,GOBIN 会自动成为 GOPATH/bin。
当使用
GO111MODULE=on时,go get是下载文件还是仅根据 go.mod 文件进行缓存?我是缓存方面的新手,这些缓存文件在我关闭机器后会消失吗?
go get 模块会将模块缓存到 GOPATH/pkg/mod 目录中。缓存是持久性的,因此关闭机器后不会丢失。
要了解您当前的设置,只需使用 env 命令(我使用的是 Linux 系统,以下是我的输出):
$ go env
GOARCH="amd64"
GOBIN="/home/u0/bin"
GOCACHE="/home/u0/.cache/go-build"
...
GOPATH="/home/u0"
...
GOROOT="/usr/local/go"
...
$
更多阅读:go 命令 - cmd/go - Go 包。
在 Go 语言中,go get 的行为取决于 GOPATH 和模块模式(Go modules)的设置。以下是详细解释和示例:
1. 当设置了 GOPATH 时
- 在传统模式下(即未启用 Go modules),
go get会将依赖下载到GOPATH下的src目录中。 - 例如,如果
GOPATH=/home/user/go,运行go get github.com/example/pkg会将文件下载到/home/user/go/src/github.com/example/pkg。
2. 当启用 Go modules 时(GO111MODULE=on)
- 在模块模式下,
go get不再依赖GOPATH,而是基于项目目录下的go.mod文件管理依赖。 - 依赖会被下载到 Go 模块缓存中,默认位置是
$GOPATH/pkg/mod(即使GO111MODULE=on,也会使用GOPATH作为缓存目录,除非通过GOMODCACHE环境变量自定义)。 - 例如,运行
go get github.com/example/pkg@v1.0.0会将文件缓存到类似$GOPATH/pkg/mod/github.com/example/pkg@v1.0.0的路径中。
3. 关于缓存持久性
- Go 模块缓存是持久化的,存储在磁盘上。关闭机器后缓存文件不会消失,除非手动删除或系统清理。
- 缓存路径可以通过
go env GOMODCACHE命令查看。默认情况下,它与GOPATH相关。
示例代码说明
以下是一个简单的示例,展示如何在模块模式下使用 go get:
- 启用模块模式(如果尚未设置):
export GO111MODULE=on - 在项目目录中初始化模块(如果还没有
go.mod文件):go mod init example.com/myproject - 使用
go get下载依赖:
这会将 Gin 框架下载到模块缓存中,并在go get github.com/gin-gonic/gin@v1.9.0go.mod文件中记录依赖。
总结
- 在传统
GOPATH模式下,go get下载文件到GOPATH/src。 - 在模块模式下,
go get下载依赖到模块缓存(默认在GOPATH/pkg/mod),并更新go.mod。 - 缓存文件是持久的,不会因机器重启而丢失。
如果还有具体问题,可以提供更多细节以便进一步解答。

