GO111MODULE 是个啥?

简介: GO111MODULE 是个啥?

GO111MODULE 是啥?


GO111MODULE 是个环境变量,可以在使用 Go 或者更改 Go 导入包的方式时候设置。

要注意的是,这个变量在不同 Go 版本有不同的语义


没有包管理阶段


  • 一开始go发布的时候是没有包管理的
  • go get命令会根据路径,把相应的模块获取并保存在$GOPATH/src
  • 也没有版本的概念,master 就代表稳定的版本

首先,让我们谈谈 GOPATH。当 Go 在 2009 年首次推出时,它并没有随包管理器一起提供。取而代之的是 go get,通过使用它们的导入路径来获取所有源并将其存储在$GOPATH/src 中。没有版本控制并且『master』分支表示该软件包的稳定版本。

Go 1.11 引入了 Go 模块。Go Modules 不使用 GOPATH 存储每个软件包的单个 git checkout,而是存储带有 go.mod 标记版本的标记版本,并跟踪每个软件包的版本。

什么时候用 GOPATH, 什么时候用 GOMODULE ?这是个问题,需要通过 GO111MODULE 来解决。

Go 1.11 和 1.12 阶段


即使项目在您的 GOPATH 中,GO111MODULE = on 仍将强制使用 Go 模块。仍然需要 go.mod 才能正常工作。

  1. GO111MODULE = off

强制 Go 表现出 GOPATH 方式,即使你的项目不在 GOPATH 目录里。

. GO111MODULE = auto 是默认模式。

在这种模式下,Go 会表现:当项目路径在 GOPATH 目录外部时, 设置为 GO111MODULE = on 当项目路径位于 GOPATH 内部时,即使存在 go.mod, 设置为 GO111MODULE = off。

Go 1.13 阶段


在 Go 1.13 下, GO111MODULE 的默认行为 (auto) 语义变了。

  • 当存在 go.mod 文件时或处于 GOPATH 外, 其行为均会等同于 GO111MODULE=on。相当于 Go 1.13 下你可以将所有的代码仓库均不存储在 GOPATH 下。
  • 当项目目录处于 GOPATH 内,且没有 go.mod 文件存在时其行为会等同于 GO111MODULE=off。

Go Modules 的使用说明


使用 go get 同样会更新你的 go.mod


go get 通常它是用于提供一个安装或下载包的功能。但如果使用了 Go modules,当你在一个有着 go.mod 文件存在的仓库下使用这个命令会将你所下载或安装的包静默记录于go.mod 文件中。

Go Modules 依赖项的存储在哪个目录?


使用 Go Modules 时,在 go build 期间使用的包存储在 $GOPATH/pkg/mod 中。

在尝试在开发工具中的import时,你可能最终使用的包是 GOPATH 中的版本,而不是编译期间使用的 pkg/mod

当让项目固定指向一个依赖项时,可以使用 vendor 目录

  • 解决方法 1: 使用 go mod vendor + go build -mod=vendor。这将强制 go 使用 vendor/files 而不是 $GOPATH/pkg/mod 中的一个。该选项还解决了 开发工具 不能打开包文件的正确版本的问题。
  • 解决方法 2: 在 go.mod 末尾添加 replace 行:
use replace github.com/maelvls/beers => ../beers
相关文章
Springboot 导出word,动态填充表格数据
Springboot 导出word,动态填充表格数据
vue2自定义指令-加载指令v-loading和占位图指令v-showimg
vue2自定义指令-加载指令v-loading和占位图指令v-showimg
|
3月前
|
Unix Linux 编译器
解决在Windows平台上运行Golang程序时出现的syscall.SIGUSR1未定义错误。
通过这种结构,你的代码既可以在支持 SIGUSR1 信号的系统上正常工作,又可以在不支持这些信号的 Windows 系统上编译通过,确保跨平台的兼容性和功能的完整性。
177 0
|
7月前
|
人工智能 前端开发 Java
AI大模型进阶系列(03) prompt 工程指南 | 实战核心技术有哪些?
本文深入讲解了AI大模型中的prompt工程。文章分析了role角色(system、user、assistant)的意义,message多轮会话记忆机制,以及prompt的核心三要素(上下文背景、输入内容、输出指示)。同时介绍了多种提示优化技术,如少样本提示、CoT链式思考、prompt chaining链式提示、思维树ToT提示等,还展示了让AI生成提示词的方法,为实际应用提供了全面指导。
|
小程序 API 调度
消费级显卡,17G显存,玩转图像生成模型FLUX.1!
近期stable diffusion的部分核心开发同学,推出了全新的图像生成模型FLUX.1。
|
Rust Linux iOS开发
Rust 交叉编译 macOS 为 Linux 和 Windows
Rust 交叉编译 macOS 为 Linux 和 Windows
565 0
|
存储 编译器 Go
深入理解Go Workspace的三个关键目录结构
【8月更文挑战第31天】
668 0
|
设计模式 Go
Go语言事件系统设计解析:发布-订阅模式实战
Go语言事件系统设计解析:发布-订阅模式实战
825 0
|
JavaScript 程序员
老程序员分享:JS日期格式转换
老程序员分享:JS日期格式转换
451 0
|
NoSQL 安全 物联网
检索时间减少83%!部署MongoDB后,通用电气医疗集团狠狠提升了物联网设备的利用效率!
作为医疗技术领域的全球领导者,通用电气医疗集团选择了 MongoDB由其管理旗下物联网设备,从部署(生命周期初期,即 BoL)到报废(生命周期结束,即 EoL)的整个生命周期
2106 3
检索时间减少83%!部署MongoDB后,通用电气医疗集团狠狠提升了物联网设备的利用效率!