尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

go.work工作区

go.work工作区
📅 发布时间:2026/6/17 19:27:23

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里的use和replace指令会覆盖工作区目录下的每个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.work 和 go.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 sync 把go.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 版本。

相关新闻

  • 2025 年别墅电梯优质厂家最新推荐排行榜:聚焦技术安全与市场口碑,助力业主精准选购家用/自建房/电梯维修/电梯加装/电梯改造/老旧小区加装电梯厂家推荐
  • 跨网文件摆渡系统是什么?你想了解的问题都在这!
  • 从零开始:C#实现计算表达式解析与求值——以后缀表达式为例

最新新闻

  • 广州二手包包变现避坑指南 全渠道实测,优质回收品牌实力盘点 - 奢侈品回收测评
  • MPC5200时钟与电源管理:嵌入式SoC核心架构与低功耗实战
  • 【学习笔记】TI-OSAL
  • 2026密封条选购指南:三元乙丙胶条/尼龙(PA)隔热条/防火阻燃密封条正规厂家推荐:新合星塑胶制品有限公司领衔 - 栗子测评
  • XY2100命令行工具:模块化与管道化设计提升数据处理效率
  • 2026长沙钻石回收门店实力排行,禹竞名奢汇综合实力稳居榜首 - 名奢变现站

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号