极简入门:
一、Go 环境
1.1 go env
- 使用命令
go env
可以查看 go 的环境变量,重点的是GOPATH
,GOBIN
这两个GOPATH
将在未来的新版中逐渐透明,我们不需要再过多关注它,Go 将会默认使用go modules
- 更改环境变量的值可以直接使用命令:
set GOPATH=<路径>
,set GOBIN=GOPATH/bin
,也可以直接在系统环境变量中编辑。 GOPATH
目录下迟早会有 3 个子文件夹:src、bin、pkg- src:众项目的源代码
- bin:存放
go get
、go install
安装第三方包的可执行程序(*.exe)所以
GOBIN
需要添加到系统环境变量中 - pkg:存放
go mod tidy
、go get
等命令下载的第三方包
1.2 GO111MODULE
GO111MODULE
有三个值:off、on、auto:
- 可以使用命令:
set GO111MODULE=*
来设置是否启用go modules
包管理模式 GO111MODULE=off
,go 命令行将不会支持go modules
功能,将会去 vendor 目录或者 GOPATH 寻找依赖包。GO111MODULE=on
,go 命令行会启用go modules
,而一点也不会去GOPATH/src
目录下查找。GO111MODULE=auto
,go 命令行将会根据当前目录来决定是否启用go module
功能。
二、go modules 及依赖加载介绍
go modules
是 golang 的一个依赖管理器,go modules
能自动识别并下载依赖,对于依赖管理和项目迁移都有较好的支持。它在 1.11 版本提出,在 1.13 版本后默认开启。
因此如果当前的 golang 环境小于 1.13 需要通过设置环境变量
GO111MODULE=auto
或on
开启,大于 Go 1.13 的版本中GO111MODULE
默认为on
。
2.1 Go 的依赖加载顺序
-
在非
go modules
环境下,依赖加载顺序是:项目根目录下的vendor文件夹
👉GOPATH/src
👉GOROOT/src
这样的顺序查找。 -
在
go modules
环境下,依赖都放在GOPATH/pkg/mod
目录中。go mod vendor
// 可以在依赖拉取完成后运行该命令,将依赖包拷贝到项目目录中去
2.2 go modules 安装依赖
-
如果 go 版本小于 1.13
- window 下在 cmd 中执行:
set GO111MODULE=on
// 启用 go modules
set GOPROXY=https://goproxy.cn
// 使用国内代理能快速拉取依赖 - linux 下执行:
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
- window 下在 cmd 中执行:
-
如果 go 版本大于 1.13
go env -w GOPROXY=https://goproxy.cn,direct
// 只需设置国内代理GO111MODULE
默认开启
-
然后在项目目录下面执行命令
> go mod init // 初始化 go mod 包管理,项目目录下生成 go.mod 文件 > go mod tidy // 根据 go.mod 文件拉取依赖包,默认放在 `GOPATH/pkg/mod` 目录中 > go mod vendor // 项目目录下生成 `vendor` 文件夹,并将依赖包拷贝进去 > go run main.go // 运行 go 程序
-
go.mod 如何编辑和使用
- 通过在代码中修改
import
语句,来修改go.mod
:go get
+ url 可用于添加新模块,相应的 url 和版本会写到go.mod
中,go get
下载的包存放在GOPATH/pkg/mod
目录中,包的可执行程序(*.exe)放在GOPATH/bin
目录中(即GOBIN
)go get
=git clone
+go install
go mod tidy
下载 / 删除变动的模块;
- 将未用
import
导入的模块写入go.mod
:go get <pkg url>[@<version>]
;例如:
go get gitee.com/zhucheer/orange
;- 手动编辑;
- 通过在代码中修改
2.3 go modules 安装框架 / 脚手架
以 Go 语言开发的 web 框架 Orange 为例
go.mod
文件内容如下:
module go_mod_test
go 1.15
require (
gitee.com/zhucheer/orange v0.2.33
...
)
-
安装脚手架
下载项目 :go get gitee.com/zhucheer/orange
-
用 orange 命令创建一个新项目
> orange create project_name // 命令执行后将会在 `GOPATH/src` 目录下生成项目
- 若出现错误:
orange create project error: mkdir GOPATH\src\go_mod_test: The system cannot find the path specified.
,是因为GOPATH
下没有 src 目录,可以手动在GOPATH
下新建 src 目录。 - 如果出现 orange 命令报错不存在,则需要将
GOBIN
(GOPATH/bin
) 添加到环境变量。
- 若出现错误:
-
启动项目
-
只需确保已经启用
go modules
包管理模式 -
进入项目目录后依次执行下面的命令
> go mod init > go mod tidy > go mod vendor > go run main.go
-
-
打包项目
> 配置好 `GOBIN` 环境变量,进入项目目录,然后执行如下命令: > window: `orange.exe build` > linux:`orange build` > 打包命令默认会将程序打包到 build 目录下,打包好的程序可以直接运行,不依赖 golang 环境。