go mod 依赖管理

简介: go mod 依赖管理

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

注:如果你的 GoLand 不会自动拉取依赖,检查一下 IDE 配置里面是不是没有启用 Go Modules。

go mod 介绍

Modules 官方定义为:

模块是相关 Go 包的集合。modules 是源代码交换和版本控制的单元。go 命令直接支持使用 modules,包括记录和解析对其他模块的依赖性。

modules 替换旧的基于 GOPATH 的方法来指定在给定构建中使用哪些源文件。

如何使用 go mod

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

我们可以先设置一下 GO111MODULEGOPROXY 环境变量,可以直接加到环境变量中:

  • GO111MODULE=on 开启 go modules 功能
  • GOPROXY 设置 go 代理,下载依赖的时候可以更快地下载

go mod 命令

  • go mod download:下载依赖包
  • go mod edit:编辑 go.mod
  • go mod graph:打印模块依赖图
  • go mod init:初始化新的 go module 在当前目录(嗯,是的,我们写的代码其实也等于是一个 go module)
  • go mod tidy:拉取缺少的模块,移除不用的模块
  • go mod vendor:将依赖复制到 vendor 下
  • go mod verify:验证依赖是否正确
  • go mod why:解释为什么需要依赖

go.mod 文件

module hello
go 1.18

go.mod 文件一旦创建后,它的内容将会被 go toolchain 全面掌控。go toolchain 会在各类命令执行时,比如 go getgo buildgo mod 等修改和维护 go.mod 文件。

go.mod 提供了 modulerequirereplaceexclude 四个命令。

  • module:指定包的名字(路径)
  • require:指定依赖项模块
  • replace:替换依赖模块(比如自己修改了一版,就可以使用 replace 将依赖替换为自己的实现,但是代码里面 import 路径还是旧的路径)
  • exclude:用于排除某个包的特定版本,与 replace 类似,仅在当前 module 为 main module 时有效,其他项目引用当前项目时,exclude 指令会被忽略

go module 安装依赖的原则是先拉取最新的 release tag,若无则拉最新的 commit。

go 会自动生成一个 go.sum 文件来记录 dependency tree。

go get 升级

go get -u need-upgrade-package

升级后会将新的依赖版本更新到 go.mod,也可以使用 go get -u 升级所有依赖。

  • 运行 go get -u 将会升级到最新的次要版本或者修订版本(x.y.z 是修订版本号,y 是次要版本号)
  • 运行 go get -u=patch 将会升级到最新的修订版本
  • 运行 go get package@version 将会升级到指定的版本号 version
  • 运行 go get 如果有版本的更改,那么 go.mod 文件也会更改

go.sum

这个文件记录了当前拉取的实际的版本号。可以保证我们每次拉取的都是相同的版本,除非我们手动去更新。


目录
相关文章
|
7月前
|
搜索推荐 Go 开发者
Go模块与依赖管理:构建稳定、可维护的项目生态
【2月更文挑战第9天】Go模块是Go语言从1.11版本开始引入的一个新的依赖管理工具,它改变了以往通过GOPATH管理项目依赖的方式,为Go开发者带来了更加灵活、高效的依赖管理方式。本文将深入探讨Go模块与依赖管理的概念、使用方法和最佳实践,帮助读者更好地理解和应用Go模块,构建稳定、可维护的项目生态。
|
4月前
|
Go API 开发工具
Go etcd 的依赖问题终于解决了。。。
Go etcd 的依赖问题终于解决了。。。
|
29天前
|
存储 安全 Go
Go 语言以其高效的并发编程能力著称,主要依赖于 goroutines 和 channels 两大核心机制
Go 语言以其高效的并发编程能力著称,主要依赖于 goroutines 和 channels 两大核心机制。本文介绍了这两者的概念、用法及如何结合使用,实现任务的高效并发执行与数据的安全传递,强调了并发编程中的注意事项,旨在帮助开发者更好地掌握 Go 语言的并发编程技巧。
33 2
|
5月前
|
存储 Linux Go
GO 项目依赖管理:go module总结
GO 项目依赖管理:go module总结
91 0
|
4月前
|
安全 Go 开发者
掌握 Go 语言的依赖关系管理
【8月更文挑战第31天】
52 0
|
6月前
|
存储 缓存 JSON
Go Modules:Go语言依赖管理的新篇章
Go Modules是Go 1.11引入的依赖管理标准,解决`GOPATH`的依赖冲突问题。
111 1
|
6月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之在执行环境 custom pre-deploy 时,命令 "go mod tidy" 失败了,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
416 0
|
7月前
|
存储 Go
Golang深入浅出之-Go语言依赖管理:GOPATH与Go Modules
【4月更文挑战第27天】Go语言依赖管理从`GOPATH`进化到Go Modules。`GOPATH`时代,项目结构混乱,可通过设置多个工作空间管理。Go Modules自Go 1.11起提供更现代的管理方式,通过`go.mod`文件控制依赖。常见问题包括忘记更新`go.mod`、处理本地依赖和模块私有化,可使用`go mod tidy`、`replace`语句和`go mod vendor`解决。理解并掌握Go Modules对现代Go开发至关重要。
140 2
|
7月前
|
数据建模 Go vr&ar
idea配置go依赖下载
idea配置go依赖下载
182 0
|
Go 前端开发 开发者
Golang 依赖注入(Dependency Injection)
在各种大工程中少不了各种测试,其中 TDD 就是非常流行的一种,在前端开发中用的比较多的 [Jest](https://github.com/facebook/jest) 就是一种,在 Golang 开发命令行工具的时候也是需要 DI 这种模式来实现命令行测试的。
1855 0