加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

在 Go 中,使用 Gopath 可以实现项目的目录结构管理和维护

发布时间:2023-07-10 14:36:01 所属栏目:语言 来源:
导读:这篇“Go语言GOPATH的概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇
这篇“Go语言GOPATH的概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言GOPATH的概念是什么”文章吧。
 
GOPATH是Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录(也称为工作区), 是存放Golang项目代码的文件路径。GOPATH目录一般为:1、bin,存放编译生成的二进制文件;2、pkg,其中包括XX_amd64、mod和sumdb三个文件夹;3、src,存放golang项目代码的位置。
 
一、GOPATH的概念
 
GOPATH 是 Go 语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录(也称为工作区), 是存放 Golang 项目代码的文件路径, GOPATH 适合处理大量 Go语言源码、多个包组合而成的复杂工程。
 
工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面、计算机及椅子就是你的工作区。
 
工作区的概念与工作目录的概念也是类似的。如果不使用工作目录的概念,在多人开发时,每个人有一套自己的目录结构,读取配置文件的位置不统一,
 
二、GOPATH的使用
 
GOPATH目录一般为:
 
1、bin 存放编译生成的二进制文件。比如 执行命令 go get github.com/google/gops,bin目录会生成 gops 的二进制文件。
 
2、pkg 其中pkg下面以下三个文件夹。
 
XX_amd64: 其中 XX 是目标操作系统,比如 mac 系统对应的是darwin_amd64, linux 系统对应的是 linux_amd64,存放的是.a结尾的文件。
 
mod: 当开启go Modules 模式下,go get命令缓存下依赖包存放的位置
 
sumdb: go get命令缓存下载的checksum数据存放的位
 
3、src 存放golang项目代码的位置
 
Go语言GOPATH的概念是什么
 
如下是一个完整的Go项目的开发目录:
 
my-go                 // my-go为GOPATH目录
 
  -- bin
 
     -- myApp1        // 编译生成
 
     -- myApp2        // 编译生成
 
     -- myApp3        // 编译生成
 
  -- pkg                             依赖包编译后的*.a文件//
 
  -- src
 
     -- MyApp1        // 项目1
 
        -- models
 
        -- controllers
 
        -- others
 
        -- main.go
 
     -- MyApp2        // 项目2
 
        -- models
 
        -- controllers
 
        -- others
 
        -- main.go
 
三、造成问题
 
在使用 GOPATH 模式下,我们需要将应用代码存放在固定的$GOPATH/src目录下,且如果执行go get使用第三方类库的时候会自动下载并安装到$GOPATH目录下。 项目的Golang代码,和第三方的Golang文件混在一起, 每个如果项目都需要同样的依赖,那么我们就会在不同的GoPath的src中下载大量重复的第三方依赖包,这同样会占用大量的磁盘空间
 
GOPATH 的缺点
 
必须指定目录,
 
go get 命令的时候,无法指定获取的版本
 
引用第三方项目的时候,无法处理v1、v2、v3等不同版本的引用问题,因为在GOPATH 模式下项目路径都是 github.com/foo/project
 
无法同步一致第三方版本号,在运行 Go 应用程序的时候,无法保证其它人与所期望依赖的第三方库是相同的版本。
 
我们给不同的项目设置不同的GoPath,优点非常明显:
 
便于管理项目,每个项目都是不同的GoPath,这对于我们管理多个Golang项目而言,能够非常清晰的处理项目结构。如果我们把所有项目都放在同一个GoPath的src包下,那么项目的结构就会变得非常混乱,难以管理。
 
但是当我们需要依赖第三方的包的时候,不同的项目设置不同的GoPath的缺点也非常明显:
 
第三方依赖的包和我们自己的Golang包混在一起,会给我们的项目文件管理带来一定的麻烦。
 
不同的GoPath都需要下载依赖,那么磁盘中重复的依赖就会非常多,会占用我们大量的磁盘空间。
 
所以,设置一个GoPath目录,解决依赖重复的问题,设置不同的GoPath目录,解决Golang项目结构混乱的问题,这本身就是个有争议性的问题。为了解决这所有的问题,Golang最终引入了GoModule的概念。
 
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!