前言
第一次接触到go语言,发现go语言的规范有点云里雾里,搞不清楚他们之间的关系。因此,我写了这篇笔记,梳理一下他们之间的关系及区别,也让大家少走弯路。
简介
Go语言在不同版本中对项目的工作空间管理采用了不同的方式,这包括了GOPATH
、GOROOT
和Go Modules
(通常简称为gomod
)。
GOPATH
GOPATH
是Go语言早期版本中用于指定工作空间的路径,它是一个环境变量,用来定义三个主要的目录:src
(存放源代码)、bin
(存放编译后的二进制文件)、pkg
(存放编译后的包文件)。- 简而言之,
GOPATH
指向项目所在路径。
GOROOT
GOROOT
是Go语言的安装目录,它包含了Go语言的标准库、编译器等核心组件。- 通常用户不需要修改
GOROOT
,因为它在安装Go时就已经被设置好了。 - 简而言之,GOROOT指向编译器存储路径。
GOPATH的局限性
GOPATH
只能设置一条路径。这意味着我们有多个项目同时开发时,要么把所有项目均存储到src
目录下,要么每换一次项目开发时都更改GOPATH
。前者会造成项目管理混乱,后者略显繁琐。
因此从Go 1.11版本开始,Go引入了对模块的支持,GOPATH
的使用逐渐被推荐为单一工作空间的模式所取代。
Go Modules(gomod)
- 从Go 1.11版本开始,Go引入了模块的概念,这是Go语言的依赖管理工具。
- 模块允许开发者在项目中指定依赖的确切版本,解决了版本控制和依赖冲突的问题。
- 使用
go mod
命令可以管理模块依赖,例如go mod init
初始化模块、go mod tidy
整理依赖等。 - 从Go 1.13版本开始,Go Modules成为了官方推荐的依赖管理方式,并且在Go 1.15中,Go Modules成为了默认的依赖管理方式。
Go Modules的出现极大地简化了Go项目的依赖管理,使得开发者可以更容易地构建和维护大型项目。
总结
Goland
也给出了一种解决方式,它在设置中可以为每一个项目都设置一个GOPATH
。
但是GOMOD
已经成为推荐的方式,因此初学者建议是无需学习GOPATH
相关的繁琐设置,直接学习GOMOD
即可。如果有需要,回过头来再看可以大大节约学习成本。