- 交互式 官方中文教程
GOPATH
gopath 的工程结构如下:
|- src
|- pkg
|- bin
- src:你的源码,src 下的每个目录就相当于是 java 中的包名
- bin:
go build
、go install
、go get
等命令产生的二进制可执行文件存放目录 - pkg:上面 bin 中的这些命令产生的缓存文件会存储在这里
所以:由此看来,gopath 就分为全局和项目级,gopath 是通过环境变量指定的。
GOPATH 的作用:
- 它类似一个工程,也就是 workspace,有工程就有第三方的依赖包等,那么这些第三方的依赖包也会存在该 gopath 下。
- 项目自己执行的打包、编译等产生的信息也会在这个 gopath 下
所以:当你有多个项目开发时,就很痛苦了,而且还没有版本管理的概念。那么此时可以使用 go v1.11 官方出品的依赖管理工具 go mod
来替代项目级的 gopath
go mod
命令 | 作用 |
---|---|
go mod download | 下载依赖包到本地(默认为 GOPATH/pkg/mod 目录) |
go mod edit | 编辑 go.mod 文件 |
go mod graph | 打印模块依赖图 |
go mod init | 初始化当前文件夹,创建 go.mod 文件 |
go mod tidy | 增加缺少的包,删除无用的包 |
go mod vendor | 将依赖复制到 vendor 目录下 |
go mod verify | 校验依赖 |
go mod why | 解释为什么需要依赖 |
如何使用?假设这里需要开发一个 app 项目,首先需要在 gopath 目录外 任意目录创建一个 app 目录,也就是 app 项目
:::info
为什么需要在 gopath 目录外?
使用 go mod,你可以想象成原来的 gopath 就是 gradle、maven 的工作目录,一些第三方依赖会下载到 gopath 中,那么项目级的 gopath 也不需要了,直接用系统级的 gopath 就行了,就把系统级的 gopath 当成是 maven、gradle 工具目录
:::
一个 go mod 管理的项目如下所示:
|- app
|- go.mod
|- 其他 go 文件可以随意组织
这里最主要的就是 go.mod 的使用,go.mod 提供了 module、require、replace 和 exclude 四个命令:
- module 语句指定包的名字(路径);
- require 语句指定的依赖项模块;
- replace 语句可以替换依赖项模块;
- exclude 语句可以忽略依赖项模块。
module ch02 // 该项目的名字
go 1.16 // 使用的 go 版本
// 依赖的模块
require github.com/gorilla/mux v1.8.0
go mod init
:一个新项目需要生成 go.mod 文件时,可以使用此命令go mod download
:当你拿到一个新项目需要安装依赖时,可以使用此命令