一、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项目的开发目录:

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 的缺点

  1. 必须指定目录,
  2. go get 命令的时候,无法指定获取的版本
  3. 引用第三方项目的时候,无法处理v1、v2、v3等不同版本的引用问题,因为在GOPATH 模式下项目路径都是 github.com/foo/project
  4. 无法同步一致第三方版本号,在运行 Go 应用程序的时候,无法保证其它人与所期望依赖的第三方库是相同的版本。

我们给不同的项目设置不同的GoPath,优点非常明显:

便于管理项目,每个项目都是不同的GoPath,这对于我们管理多个Golang项目而言,能够非常清晰的处理项目结构。如果我们把所有项目都放在同一个GoPath的src包下,那么项目的结构就会变得非常混乱,难以管理。

但是当我们需要依赖第三方的包的时候,不同的项目设置不同的GoPath的缺点也非常明显:

  1. 第三方依赖的包和我们自己的Golang包混在一起,会给我们的项目文件管理带来一定的麻烦。
  2. 不同的GoPath都需要下载依赖,那么磁盘中重复的依赖就会非常多,会占用我们大量的磁盘空间。

所以,设置一个GoPath目录,解决依赖重复的问题,设置不同的GoPath目录,解决Golang项目结构混乱的问题,这本身就是个有争议性的问题。

为了解决这所有的问题,Golang最终引入了GoModule的概念。

四、参考

一文搞懂GOPATH 与 GO Modules

Golang中的GoPath和GoModule

Go语言GOPATH是什么相关推荐

  1. 快速弄明白 Go 语言 GOPATH 设置

    Go语言提供两个关键路径,GOROOT 指向系统安装路径,GOPATH指向工作路径,这样的好处是,我们的工作可以和系统文件分离.例如: GOROOT = C:\Go GOPATH = D:\MyWor ...

  2. goland/go语言项目--本地包的导入(将项目添加至GOPATH中)(基于macOS)

    goland/go语言项目–本地包的导入(将项目添加至GOPATH中)(macOS) 1. 创建项目 首先,在桌面上创建一个文件夹G0Project,从而创建项目. //利用go mod进行初始化项目 ...

  3. go语言笔记——go环境变量goroot是安装了路径和gopath是三方包路径

    Go 环境变量 Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go 之间就已经设置好他们.如果你使用的是 Windows 的话,你完全不用进行手动设置,Go 将被默认安装在目录 c:/go  ...

  4. 安装go编译器后没有gopath文件夹_Go 语言环境安装(集成 VS code)

    作为一个产品狗,一直希望能够点亮编程技能.今天刮台风,无处可去,正好窝在家学习一些编程的知识.研究了很多语言特性后,决定从Go语言入手,开启自己的编程之旅.环境安装主要分成两个部分,第一部分Go编译器 ...

  5. go语言工作目录都有什么?GOPATH下的目录结构

    认识一下Go语言环境配置(配置环境变量以及解读工作目录) (一)设置环境变量 (1)GOROOT: 为了方便计算,找到我们所安装的SDK,路径一般写到bin目录的上一级,就是go的安装路径,也是为了方 ...

  6. 如何理解Go语言的GOROOT/GOPATH

    可以简单理解为: $GOPATH 是go的工程目录 /home/guest/gocode ├── bin ├── pkg └── src $GOROOT 是go的安装目录 /home/guest/to ...

  7. go语言基础知识-GOROOT、GOPATH、go install、go build、go mod

    对golang工作空间.GOROOT.GOPATH以及常见的go命令(go build.go install.go mod)进行说明,作为初学golang所需要掌握的基础知识 文章目录 工作空间 环境 ...

  8. 模块一:Go语言基础知识 -01 | 工作区和GOPATH

    01 | 工作区和GOPATH Go 语言规范文档 The Go Programming Language Specification https://golang.google.cn/ref/spe ...

  9. go语言的GOPATH详解

    GOPATH是Go语言中使用的一个环境变量,使用绝对路径提供项目的工作目录.工作目录是一个工程开发的相对参考目录. GOPATH适合处理大量Go语言源码.多个包组合而成的复杂工程. 1.使用命令行查看 ...

最新文章

  1. CVPR 2019论文阅读:Libra R-CNN如何解决不平衡对检测性能的影响?
  2. Markdown文章转化为富文本文章
  3. FPGA等效门数的计算方法
  4. 计算机tlv简介_TLV2462
  5. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )
  6. 一个快速、高效的Levenshtein算法实现
  7. intellij 快捷键整理
  8. SEGW activation check bypass via debugging
  9. 将一句话的单词进行倒置,标点符号不倒换。比如一句话:“i love you.”倒换后变为you. love i
  10. 百度小程序全套源码下载、免费分享,一键生成百度小程序
  11. 树莓派python界面编程_玩转树莓派-RaspBerry,使用Python开发定制界面
  12. java 解决死锁_如何解决java中的死锁问题
  13. Rational Rose2003安装
  14. SFP光模块怎么配对光纤线缆
  15. 怎么给边框添加图片 css3,用CSS3轻松实现图片边框
  16. selenium 模拟登陆豆瓣,爬取武林外传的短评
  17. 万物皆可傅里叶|傅里叶分析之掐死教程(完整版)
  18. 刷题记录:牛客NC16122郊区春游
  19. CSDN--在有序和无序段落中如何换行
  20. H5 语音合成播报功能

热门文章

  1. 有未分配空间,为什么c盘还是不能扩容?
  2. 分布式协议算法——RAFT协议
  3. MiniGUI字体放大、控件字体颜色的问题(转)
  4. iphone禁用提交按钮_如何在iPhone的锁定屏幕上禁用Siri建议
  5. iverilog入门教程
  6. xlsxwriter在表格中插入图片
  7. 教程 | 零基础学画禅绕画——陨落的花朵
  8. Java 1~4章复习
  9. html动态生成下载二维码
  10. 诛仙手游最新服务器,诛仙手游公测服务器征名 服务器名称你做主