go.work工作区

news/2025/10/9 10:26:20/文章来源:https://www.cnblogs.com/3to4/p/19130564

go.work工作区

教程:多模块工作区入门 - Go 编程语言 - Go 编程语言

Go 1.18 引入。

工作区的作用是在一个“大工程”中,同时管理多个“子工程”,且这几个“子工程”之间可以方便地直接相互引用,而不再查找远程仓库的同名依赖(replace指令)。可见工作区本身属于临时开发配置,不属于发布配置。

使用

一般情况(个人小项目、团队内没有同时负责多个工程)下是用不到工作区的,用到工作区的情况都是一个人同时要维护多个工程,此时对工程在本地修改后,代码合入前,这些修改无法从远程仓库拉取得到(因为都在本地),因此需要让其他依赖此工程的工程,使用replace指令来将其依赖重定向到本地的版本。而工作区就是方便管理这些replace指令的。

在Go 1.18以前,如果遇到以下场景:Module A新增了一个feature,Module B需要使用Module A的这个新feature,你有2种方案:

  • 发布Module A的修改到代码仓库,Module B更新依赖的Module A的版本即可
  • 修改Module B的go.mod,使用replace指令把对Module A的依赖指向你本地未发布的Module A所在目录。等Module A发布后,在发布Module B的时候,再删除Module B的go.mod文件里的replace指令。

有了Go工作区模式之后,针对上述场景,我们有了更为简单的方案:你可以在工作区目录维护一个go.work文件来管理你的所有依赖。go.work里的usereplace指令会覆盖工作区目录下的每个Go Module的go.mod文件,因此没有必要去修改Go Module的go.mod文件了。

注意

  • 工作区只能用于使用Go Modules管理的工程
  • 通常情况下, 建议不要提交 go.work 文件和 go.work.sum 到 git 上, 因为它主要用于本地代码开发,属于临时配置

go.work文件

go.work 文件示例(Go Modules 参考 - Go 编程语言 - Go 编程语言):

# 指定工作区的go版本
go 1.18
# 相对路径是相对go.work文件的路径
# 指定哪些go.mod会加入编译,这个指令不会递归
# 假设your-module引用了upstream-mod,那么还相当于自动给your-module添加了replace指令,将upstream-mod重定向到本地path-to-upstream-mod-dir的版本
use (./path-to-upstream-mod-dir./path-to-your-module
)replace (golang.org/x/net v1.2.3 => ./fork/netgolang.org/x/net => ./fork/net
)

注意

  • go.work 文件中的定义优先于 go.mod 的定义,比如同时在 go.workgo.mod 中 replace 分别指定不同的代码仓库路径,实际采用的是 go.work 中的。

常用命令

  • go env GOWORK 查看当前工作区根路径(就是 go.work 的绝对路径)

  • go run/build 工作区被use的目录 编译工作区中的指定模块

  • go work init 初始化工作区文件, 用于生成 go.work 工作区文件

    # hello目录必须存在,且其下必须存在go.mod文件
    go work init ./hello
    
  • go work use 添加go模块到工作区

    # 添加一个模块到工作区
    go work use ./example
    # 添加多个模块到工作区
    go work use ./example ./example1
    # 递归查找-r后面的路径参数下的所有子目录,把所有包含go.mod文件的子目录都添加到go work文件中
    go work use -r ./example
    
  • go work edit 用于编辑 go.work 文件。手动编辑该文件也可以,这个命令是方便给命令行工具使用。

    # 重新格式化 go.work 文件
    go work edit -fmt go.work
    # 替换代码模块
    go work edit -replace=github.com/link1st/example=./example go.work
    # 删除替换代码模块
    go work edit -dropreplace=github.com/link1st/example 
    # 添加新的模块到工作区
    go work edit -use=./example go.work 
    # 从工作区中删除模块
    go work edit -dropuse=./example go.work
    # 查看工作区信息
    go work edit -json
    # 查看工作区模块列表
    go work use
    
  • go work syncgo.work文件里的依赖同步到workspace包含的各Module的go.mod文件中。比如go.work中use了app模块和utils模块。现在 app 模块依赖了 utils 模块的v1.0.0版本。现在 utils 远端升级到了 v1.1.0 版本,因此我们在 app/go.mod 中添加了 require example.com/utils v1.1.0 指令。同时本地的 utils 包应该手动拉取更新(因为go.work中use了会让go编译时使用本地的版本)或者用 go work sync 来检查依赖的 utils 是不是期望的 v1.1.0 版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux网站建设技术指南 pdfwordpress文库管理系统

一、人工智能、机器学习、深度学习的关系 近些年人工智能、机器学习和深度学习的概念十分火热,但很多从业者却很难说清它们之间的关系,外行人更是雾里看花。概括来说,人工智能、机器学习和深度学习覆盖的技术范畴是逐层递减的,三…

yolov12 训练json格式 - 实践

yolov12 训练json格式 - 实践2025-10-09 10:18 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

凡天网网站建设wordpress 聚合6

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核,池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…

2025 房屋改造设计公司最新推荐榜:覆盖全场景需求,精准匹配老房 / 小户型 / 局部改造优质品牌

伴随存量房市场崛起,房屋改造需求呈爆发式增长,从老房结构翻新到小户型扩容,从厨卫局部焕新到全屋功能升级,消费者诉求日益多元。但市场长期存在 “大公司轻小单、游击队缺保障” 的痛点,报价模糊、工艺参差、售后…

mysql查询重复项

Querying Duplicates in MySQL 1 2 3 To find duplicate records in a MySQL table, you can use the GROUP BY clause along with the HAVING clause. This approach identifies rows where specific column values a…

做cps要做什么类型的网站淮北集团网站建设

注释是shell脚本中非常重要的内容&#xff0c;方便自己理解和别人理解。不会产生效果。也就是对于脚本起到了解释的作用。 单行注释 # 如下显示 [rootLDP ~]# cat 3.sh #你好 echo 你好 [rootLDP ~]# bash 3.sh 你好多行注释 使用<<加关键字 范围就是到下一个相同…

2025 年最新推荐碳纤维布源头厂家口碑排行榜:实力企业重点项目案例与选择指南全解析建筑/加固/300克/碳纤维加固布厂家推荐

当前建筑加固行业对碳纤维布的需求日益增长,但市场乱象却给采购方带来诸多困扰。一方面,部分厂家为追求利润降低成本,生产的碳纤维布在抗拉强度、耐老化性等关键性能上不达标,给工程安全埋下严重隐患;另一方面,源…

小程序上传文件,如发票

只能从微信聊天记录里面选择文件如下:wx.chooseMessageFile({count: 1, // 最多可以选择的文件个数type: file, // fileextension: [pdf], // 类型success(res) {const filePath = res.tempFiles[0].path;const file…

褚橙的网站建设html制作个人简历

题目&#xff1a;已知在一维数组A[mn]中依次存放两个线性表&#xff08;a1,a2,a3,...,an&#xff09;和&#xff08;b1,b2,b3,...,bn&#xff09;。编写一个函数&#xff0c;将数组中两个顺序表的位置互换&#xff0c;即将&#xff08;b1,b2,b3,...,bn&#xff09;放在&#xf…

AI问答与搜索引擎:信息获取的现状

随着科技的快速进步,获取信息的方式经历了巨大的变化。从早期的书籍查阅到如今的互联网搜索,信息检索技术已经深入人们的日常生活。然而,近年来,AI问答系统的崛起似乎在改变我们与信息的互动方式。那么,AI问答和搜…

2025 年别墅电梯优质厂家最新推荐排行榜:聚焦技术安全与市场口碑,助力业主精准选购家用/自建房/电梯维修/电梯加装/电梯改造/老旧小区加装电梯厂家推荐

随着高端住宅品质升级,别墅电梯已从 “可选配置” 变为提升居住体验的 “刚需品”,但市场现状却让消费者陷入选购困境。一方面,家用电梯缺乏强制性监管检验,部分品牌以次充好,核心技术缺失导致运行不稳、噪音超标…

跨网文件摆渡系统是什么?你想了解的问题都在这!

跨网文件摆渡系统,通俗的来说,就是解决两个不同网络之间的文件传输问题,但是就是传输这么简单吗?那肯定不是的!那么跨网文件摆渡系统究竟是什么?可以解决哪些问题?适用于哪些场景?有什么特性?等等这类问题,本…

做伞的外国网站西安流调信息

题目&#xff1a; 孤单的zydsg又一次孤单的度过了520&#xff0c;不过下一次不会再这样了。zydsg要做些改变&#xff0c;他想去和素数小姐姐约会。 所有的路口都被标号为了一个4位素数&#xff0c;zydsg现在的位置和素数小姐姐的家也是这样&#xff0c;如果两个路口间只差1个数…

使用Grok获取Sora2邀请码

昨天手动刷新等Sora2最新的邀请码,试了不下一百个,都提示已经失效了。好几个几秒前贴出来的邀请码,火速复制粘贴,奈何也都是失效。 偶然在网上看到通过Grok搜索邀请码的方法,试了十几回竟然成功了! 提示词如下:…

门户网站开发如何提高产品排名保定做网站建设

一.栈的整体作用 (1)保存现场/上下文 (2)传递参数:汇编代码调用c函数时&#xff0c;需传递参数 (3)保存临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。 二.为什么汇编代码调用c函数需要设置栈 之前看了很多关于uboot的分析&#xff0c;其中就有说要为C语…

一文详解企业如何借助AI技术重构业务基因(附发展趋势、关键能力、具体策略)

摘 要 近年来,AI 技术应用迎来新的发展高潮,成为企业重构业务基因、提档进阶的重要驱动力量。在 AI 技术的支持下,企业可以更高质高效地实现业务系统灵活配置和快速迭代,破除当前业务架构过于刚性、业务系统自由度…

课后作业一

动手动脑: 这段代码展示了方法重载(Method Overloading)的特性。 方法重载是指在同一个类中,可以定义多个同名的方法,只要它们的参数列表(参数的类型、个数、顺序)不同即可。 在这段代码里: 有两个名为 square…

我工作中用MQ的10种场景

前言 最近有球友问我:MQ的使用场景有哪些?工作中一定要使用MQ吗? 记得刚工作那会儿,我总是想不明白:为什么明明直接调用接口就能完成的功能,非要引入MQ这么个"中间商"? 直到经历了系统崩溃、数据丢失…

提升网站的访问速度优化关键词的方法有哪些

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 工厂方法 链接&#xff1a;C 设计模式 - 抽象工厂 链接&#xff1a;C 设计模式 - 建造者模式 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许一个对象通过复制现有对象来…