GoWeb——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
    1. 当前目录不在 GOPATH/src/ 下;
    2. 在当前目录或上层目录中存在 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命令

命令说明
downloaddownload modules to local cache(下载依赖包)
editedit go.mod from tools or scripts(编辑go.mod)
graphprint module requirement graph(打印模块依赖图)
verifyinitialize new module in current directory(在当前目录初始化mod)
tidyadd missing and remove unused modules(拉u缺少的模块,移除不用的模块)
vendormake vendored copy of dependencies(将依赖复制到vendor下)
verifyverify dependencies have expected content(验证依赖是否正确)
whyexplain why packages or modules are needed(解释为什么需要依赖)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值