Golang中如何下载文件?

Golang中如何下载文件? 我想知道当我设置了 GOPATH 时,go get 会在哪里下载并存放文件?

当使用 GO111MODULE=on 时,go get 是仍然下载文件还是仅基于 go.mod 文件进行缓存?对缓存不太熟悉,这些缓存的文件在我关闭机器后会消失吗?

谢谢

4 回复

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 但没有设置 GOBINGOBIN 会自动成为 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

  1. 启用模块模式(如果尚未设置):
    export GO111MODULE=on
    
  2. 在项目目录中初始化模块(如果还没有 go.mod 文件):
    go mod init example.com/myproject
    
  3. 使用 go get 下载依赖:
    go get github.com/gin-gonic/gin@v1.9.0
    
    这会将 Gin 框架下载到模块缓存中,并在 go.mod 文件中记录依赖。

总结

  • 在传统 GOPATH 模式下,go get 下载文件到 GOPATH/src
  • 在模块模式下,go get 下载依赖到模块缓存(默认在 GOPATH/pkg/mod),并更新 go.mod
  • 缓存文件是持久的,不会因机器重启而丢失。

如果还有具体问题,可以提供更多细节以便进一步解答。

回到顶部