GoWeb——Go Mod使用
目录
- 1、Go Mod
- 2、Go Mod模式
- 3、Go Proxy设置
- 4、Go Mod使用
- 4.1、设置项目目录
- 4.2、编写程序添加依赖库
- 4.3、go.mod命令
- 5、Go Mod命令
1、Go Mod
Go 1.11 版本推出 modules,简称 mod,go mod的推出可以使我们更容易管理项目中所需要的模块。go mod 不再依靠 $GOPATH,使得它可以脱离 GOPATH 来创建项目。也就是你可以在你电脑的任意位置创建一个文件夹作为项目目录,然后使用 go mod 命令对目录进行初始化。
2、Go Mod模式
Go Modules 在 Go 1.11 和 Go 1.12 中有三个模式,根据环境变量 GO111MODULE进行配置:
默认模式(未设置该环境变量或 GO111MODULE=auto)
Go 编译器在同时满足以下两个条件时使用 Go Mod- 当前目录不在 GOPATH/src/ 下;
- 在当前目录或上层目录中存在 go.mod 文件;
- GOPATH 模式(GO111MODULE=off)
Go 编译器从不使用 Go Mod。而会查找 vendor 目录和 GOPATH 以查找依赖项。 Go Modules 模式( GO111MODULE=on)
Go 编译器只使用 Go Mod,GOPATH不再作为导入目录,但它还是会把下载的依赖储存在 GOPATH/pkg/mod 中,也会把 go install 命令的结果放在 GOPATH/bin 中。Go 1.13 及1.13以后版本默认使用 Go Mod 模式
3、Go Proxy设置
在项目开发中我们可以会用到很多第三方库,由于有很多库在境外网站访问非常慢或需要翻墙,从而导致下载失败,在Go 1.13及以后版本我们可以通过设置环境变量GOPRIVATE来控制代理从而方便下载第三方库
# 设置GOPROXY代理
go env -w GOPROXY=https://goproxy.cn,direct
https://goproxy.cn 为代理地址
direct 为特殊指示符,用于指示 Go 回源到模块版本的源地址去抓取,
也就是说在proxy找不到的时候,会直接访问模块源码所在的地址
比如github
#设置GOPRIVATE来跳过私有库,比如常用的Gitlab或Gitee,中间使用逗号分隔:
go env -w GOPRIVATE=*.gitlab.com,*.gitee.com
常用代理
阿里云 https://mirrors.aliyun.com/goproxy/
nexus社区 https://gonexus.dev
七牛云 https://goproxy.cn
goproxy.io https://goproxy.io
4、Go Mod使用
4.1、设置项目目录
在非$GOPATH目录的任意地方创建一个文件夹,然后再终端执行 go mod init project_name进行初始化操作,成功之后会发现目录下会生产一个go.mod文件
查看go.mod内容:
module modtest
go 1.19
4.2、编写程序添加依赖库
在demo01目录下创建 main.go文件,并引入gin库,启动一个web服务,代码如下
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() //listen and serve on 0.0.0.0:8080
}
执行 go run main.go 运行代码会发现 go mod 会自动查找依赖自动下载,再查看 go.mod
module modtest
go 1.19
require github.com/gin-gonic/gin v1.9.1
go module 安装 package 的原則是先拉最新的 release tag,若无tag则拉最新的commit
go 会自动生成一个 go.sum 文件来记录 dependency tree
再次执行脚本 go run main.go发现跳过了检查并安装依赖的步骤。
可以使用命令 go list -m -u all 来检查可以升级的package,使用go get -u need-upgrade-package 升级后会将新的依赖版本更新到go.mod * 也可以使用 go get -u 升级所有依赖
4.3、go.mod命令
- module 表示模块名称(路径)
- require 依赖包列表及版本
- replace 替换依赖项模块
- exclude 忽略依赖项模块
上面截图中的 indirect 表示这个包是间接引用进来的
5、Go Mod命令
命令 | 说明 |
---|---|
download | download modules to local cache(下载依赖包) |
edit | edit go.mod from tools or scripts(编辑go.mod) |
graph | print module requirement graph(打印模块依赖图) |
verify | initialize new module in current directory(在当前目录初始化mod) |
tidy | add missing and remove unused modules(拉u缺少的模块,移除不用的模块) |
vendor | make vendored copy of dependencies(将依赖复制到vendor下) |
verify | verify dependencies have expected content(验证依赖是否正确) |
why | explain why packages or modules are needed(解释为什么需要依赖) |
还没有评论,来说两句吧...