Go 使用

Go 使用

Go 使用

包管理

GoPath 的坑
当使用 go get <package> 时,GoPath 会在 GOPATH 路径(一个环境变量)上安装第三方包。
并且在 Go 里,你的代码必须放在 GOPATH 里才能运行。

会有两种选择:

  1. 不同项目使用不同的 $GOPATH:这个优点很明显,就像 javascript 里的 node_modules 一样,不同项目自有一套自己的依赖。缺点也很明显,一是重复下载相同的依赖,占用空间大;二是 GoPath 非常垃圾,你下载的第三方包会直接下到你的 src 文件夹里,就是说和你自己写的代码放在一起,导致目录结构极其混乱,意义不明。

  2. 不同项目使用同一个 $GOPATH:解决了重复依赖占用空间的问题,但是项目结构就会极其极其混乱,不仅不同项目文件混在一起,而且还和第三方包混在一起。

使用Gomodule

令人震惊的是,Go 居然直到 1.11 版本才解决这个问题
解决方案就是 GoModule。
GoModule 解决的问题非常简单,就是在 GoPath 之外再弄一个 GoModule 目录(就是 go mod init 的那个目录),这样自己的代码安装在 GoModule 目录里,第三方则安装在 GoPath 目录里。虽然我不知道为什么这种东西还要等 1.11 版本才能出来,但这就是 GO。

GoModule 的优势:

  1. 如上面所说,自己的代码和第三方包分成了两个路径,项目结构的问题解决了。
  2. 这样就可以只设置一个 GoPath,所有项目共用这一个 GoPath,依赖重复的问题也解决了。
  3. GoModule 终于有了依赖管理,终于有了版本管理,版本冲突问题也得到了控制。(但是看网上一些帖子说还是很垃圾,这个等我遇到了再提)

在 GoPath 时代,代码只能在 GoPath 上运行,而有了 GoModule 之后,就可以在 GoModule 目录上运行代码。而 GoPath 只是作为一个仓库存放第三方包了。

创建项目

在GoPath外,使用Go mod init 需要+项目名,否则会出现 outside GoPath的错误,

而项目在GoPath下创建,则可以直接使用Go mod init 命令,原因是在GoPath下可以发现项目名。

所以新建项目的步骤:

  1. 创建项目:
  2. 命令行:go mod init 项目名
  3. 使用第三方包的时候,需要go mod tidy 将第三方包的依赖引入,第三方包存在GoPath中,避免重复下载

   转载规则


《Go 使用》 朱林刚 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Go switch 语句 Go switch 语句
switch 语句switch 语句不需要breakgo会帮你隐式break掉。 case表达式的结果类型的转换要求case表达式的结果能转换为switch表示式结果的类型 并且如果switch或case表达式的是无类型的常量时,会被自动转
2021-11-18
下一篇 
Go调度模型 Go调度模型
Go调度模型Go调度模型GO CSP模型常见的线程模型 线程之间的调度永远是一个复杂的话题,但是并发编程必然会涉及到操作系统对线程的调度。根据资源访问权限的不同,操作系统会把内存分为内核空间和用户空间,内核空间的指令代码具备直接调度计算机底
2021-11-18
  目录