GO模块引入指令Go Mod

简介: GO模块引入指令Go Mod

上文我们讲了如何进行Go程序的打包发布,本文讲述GO模块引入指令Go Mod的使用

go mod 是什么?

go modules 官方定义为:

模块是相关Go包的集合。modules是源代码交换和版本控制的单元。

go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。

详细命令

1. init

go mod init

生成 go.mod 文件,此命令会在当前目录中初始化和创建一个新的go.mod文件,手动创建go.mod文件再包含一些module声明也等同该命令,而go mod init命令便是帮我们简便操作,可以帮助我们自动创建。

2.download

go mod download

下载 go.mod 文件中指明的所有依赖,使用此命令来下载指定的模块,模块的格式可以根据主模块依赖的形式或者path@version形式指定。

3.tidy

go mod tidy

整理现有的依赖,使用此命令来下载指定的模块,并删除已经不用的模块

整理现有的依赖,使用此命令来下载指定的模块,并删除已经不用的模块

我们发现go.sum是Go语言管理包管理 go mod而使用的一种锁文件,用于记录Go项目中所有依赖包的路径和哈希值。每一行记录了一个依赖项的信息,包括依赖项的模块路径、版本、哈希值等等。例如:

go.sum文件的作用在于记录各个依赖项的版本和哈希值,用于验证项目的依赖关系是否发生变化。 当使用go mod安装依赖包的时候,会根据go.mod文件中指定的版本号下载相应的依赖包,并计算依赖包的哈希值,将这些信息记录到go.sum中,当再次构建项目的时候,go.mod会检查go.sum文件,确保依赖项的哈希值和之前记录的值一样,以此来保证项目的构建过程是可重现的 go.sum文件的重要性在于保证Go项目的依赖关系的可靠性和安全性,避免因为依赖包版本不一样导致的不可预期的问题

github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=

4.graph

go mod graph

查看现有的依赖结构,生成项目所有依赖的报告,但可读性太差,图形化更方便。

5.edit

go mod edit

编辑 go.mod 文件,之后通过 download 或 edit 进行下载

6.vendor

go mod vendor

导出项目所有的依赖到vendor目录,从mod中拷贝到项目的vendor目录下,IDE可以识别这样的目录。

7.verify

go mod verify

校验一个模块是否被篡改过,查询某个常见的模块出错是否已被篡改

8.why

go mod why

查看为什么需要依赖某模块,查询某个不常见的模块是否是哪个模块的引用

总结

本文我们了解在Golang中go mod的使用方式。Go mod提供了一系列操作modules的命令,所有的go命令中现在已经内置了对module的支持,而不仅仅是go mod命令。例如使用go get时,会经常自动在后台添加、移除、升级、降级依赖包版本。

目录
相关文章
|
7月前
|
数据挖掘 API Go
《Go 简易速速上手小册》第7章:包管理与模块(2024 最新版)(下)
《Go 简易速速上手小册》第7章:包管理与模块(2024 最新版)
74 1
|
7月前
|
存储 编译器 BI
掌握Go语言:Go语言基础构建模块解析,优缺点及进销存项目实战(2)
掌握Go语言:Go语言基础构建模块解析,优缺点及进销存项目实战(2)
|
7月前
|
搜索推荐 Go 开发者
Go模块与依赖管理:构建稳定、可维护的项目生态
【2月更文挑战第9天】Go模块是Go语言从1.11版本开始引入的一个新的依赖管理工具,它改变了以往通过GOPATH管理项目依赖的方式,为Go开发者带来了更加灵活、高效的依赖管理方式。本文将深入探讨Go模块与依赖管理的概念、使用方法和最佳实践,帮助读者更好地理解和应用Go模块,构建稳定、可维护的项目生态。
|
JSON Go 数据处理
使用Go模块进行依赖管理
摘要:本文将介绍Go语言中的模块(module)概念,以及如何使用Go模块进行依赖管理。我们会探讨模块的基本概念、使用方法、配置和依赖关系管理等方面的内容。
|
4月前
|
人工智能 IDE Go
go mod 依赖管理
go mod 依赖管理
40 1
|
4月前
|
缓存 JavaScript 前端开发
为开源项目 go-gin-api 增加 WebSocket 模块
为开源项目 go-gin-api 增加 WebSocket 模块
49 2
|
4月前
|
消息中间件 关系型数据库 MySQL
为开源项目 go-gin-api 增加后台任务模块
为开源项目 go-gin-api 增加后台任务模块
32 0
|
6月前
|
存储 Go 开发工具
go语言后端开发学习(二)——基于七牛云实现的资源上传模块
go语言后端开发学习(二)——基于七牛云实现的资源上传模块
|
6月前
|
监控 Go
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
|
6月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之在执行环境 custom pre-deploy 时,命令 "go mod tidy" 失败了,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
416 0