GOPATH前后两个版本
以前
GOPATH 是 Go 语言的一个重要环境变量,用于指定 Go 的工作区(Workspace)。
在 Go 的早期版本中,GOPATH 是 Go 项目管理的核心概念,用于存储 Go 源代码、依赖包和编译生成的文件等。
虽然 Go Modules 引入后 GOPATH 的重要性有所下降,但它在 Go 开发环境中仍然扮演着一些关键角色。
GOPATH 的作用
-
存放源码、依赖包和可执行文件:
-
GOPATH目录结构通常包含以下三个子目录:
src:存放源代码。每个 Go 包都有一个目录结构,路径对应导入路径(import path),如GOPATH/src/github.com/user/project。这是以前的有的,但是现在go mod出现后,就没有这个src的目录了pkg:存放编译后的包文件。Go 编译后会将依赖包的二进制文件存放在这里,以加快编译速度。bin:存放编译生成的可执行文件。如果你的 Go 包包含main函数并被编译为可执行文件,会放在这里。
例如,如果
GOPATH设置为/Users/username/go,则:- Go 源代码会放在
/Users/username/go/src下。 - 编译后的依赖包文件会存放在
/Users/username/go/pkg下。 - 编译生成的可执行文件会放在
/Users/username/go/bin下。
-
-
默认的模块缓存位置:
- 在 Go Modules 模式中,
GOPATH中的pkg/mod目录被用于存储模块缓存(下载的依赖包)。也就是说,GOPATH在 Go Modules 模式下主要用作模块缓存的位置,而不再是工作区。 - 通过
GOPATH/pkg/mod缓存依赖包,Go 可以更高效地管理模块的下载、缓存和版本控制。
- 在 Go Modules 模式中,
-
安装工具的位置:
- 通过
go install安装的命令行工具会放在GOPATH/bin下。例如,安装godoc工具后,godoc可执行文件会被放在GOPATH/bin目录中。 - 如果将
GOPATH/bin添加到PATH环境变量中,安装的 Go 工具就可以在任意位置直接调用。
- 通过
以前使用GOPATH进行管理的文件结构:src放所有的.go,go get后的包也放在这里;pkg用来存放这些中间产物,比如,gin包的编译后的东西,用来加速项目的编译;bin放所有的.exe文件,包括工具、项目编译后的可执行文件
但是这样就导致了一个问题,就是因为src放所有的第三方依赖,那么我两个项目,用一个包的不同版本怎么办?没办法!
现在
现在:GOPATH下,有bin和pkg,pkg中有mod和sumdb,mod中有go get安装的依赖包以及cache
现在的bin中只放可执行的工具,没有项目的.exe了
现在也没有src文件了
总结一下
go get/install 区别
一句话:对于现在的golang来说,官方指定了go get用来三方依赖的下载,go install用来下载.exe可执行文件
在 Go 语言中,go get 和 go install 是两个常用的命令,用于管理和安装 Go 包。它们在使用目的和行为上有所不同,特别是在 Go 1.17 及之后版本中有了一些重要变化。
1. go get
-
主要用途: 用于获取远程代码依赖并将其添加到当前模块的依赖列表中。
-
行为
- 下载指定的包及其依赖。
- 将下载的包版本记录到
go.mod文件中。 - 不会默认安装二进制文件(Go 1.17+ 的行为)。
-
适用场景
- 更新项目的依赖项或引入新依赖。
- 在模块化项目中(带有
go.mod文件)更常用。
示例:
go get example.com/some/package
- 将
example.com/some/package包下载并记录到go.mod文件中。
- 从 Go 1.17 开始,
go get的作用被限制在管理依赖,而不是安装二进制文件。如果需要安装工具,可以用go install。
2. go install
-
主要用途: 用于安装指定版本的 Go 包或编译为二进制文件。
-
行为
- 编译并安装指定的 Go 包。
- 如果是 Go 1.17 及之后的版本,推荐用于安装指定版本的命令行工具。
- 不会影响
go.mod文件。
-
适用场景
- 安装命令行工具或生成本地二进制文件。
示例:
go install example.com/some/tool@latest
- 安装
example.com/some/tool的最新版本到$GOPATH/bin路径下。
- 如果不指定版本号(如
@latest),需要在 Go 1.17 及之后的版本中运行go install时明确指向主模块之外的路径,否则会报错。 - 二进制文件默认安装到
GOBIN环境变量指定的路径中,通常是$GOPATH/bin。