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

go 工作区(workspace)模式

go 工作区(workspace)模式
📅 发布时间:2026/6/20 4:38:14

使用go写一个处理数学运算的小通用包

go.mod文件如下

module gitee.com/demo_go/utils_mathgo 1.25.3

utilsmath.go 文件内容如下

package utilsmathimport "fmt"func AddInt(a, b int) int {fmt.Printf("utilsmath 内部方法 AddInt %d + %d", a, b)return a + b
}

这里有几个地方,需要注意

  1. 使用mod声明的时候,不需要带上 .git 后缀(如果无脑从git上复制地址,会把.git 一起复制上)
  • 不规范声明: go mod init gitee.com:demo_go/utils_math.git
  • 正确 声明: go mod init gitee.com:demo_go/utils_math
  1. package名称应该和 mod名称一致,避免歧义,比如上面的
package utilsmath
改为 
package utils_math

如果不改,在其他工具引用时,就会导致如下样式

package mainimport ("fmt"// 这要起别名才行,看起来很麻烦utilsmath "gitee.com/demo_go/utils_math"
)func main() {b := utilsmath.AddInt(1, 2)fmt.Println("------------------------")fmt.Println(b)
}

go work 使用

上面的例子,最终目录结构如下

.
├── student
│   ├── go.mod
│   ├── go.sum
│   └── main.go
└── utils_math├── go.mod└── main.go

在使用utils_math工具包的时候,我们发现如下问题。
image
这时候,就有个问题,在 student 这个项目中,引用的 utils_math,如果改代码,改完以后,必须要

  1. 在 utils_math 改完
  2. 将 utils_math 最新的改动,推送到 git 上去
  3. 在 student 项目中,拉取最新代码

如果在调试过程中,这么搞,就很繁琐,而且,你改的也不一定对,这时候,就可以考虑使用 go work 了。

使用 go work 托管

返回到 utils 和 student 两个共用的父级目录,执行如下命令

go work init ./student ./utils_math

go work init 后面跟的是 go.mod 文件所在的路径,最终目录结构如下:

.
├── go.work
├── student
│   ├── go.mod
│   ├── go.sum
│   └── main.go
└── utils_math├── go.mod└── main.go

此时,再在 student 项目中运行 go run main.go,就是直接引用的 utils_math 项目中的代码了,此次 student 中的 go.mod等代码,都没有变化

原理

  1. 检测到当前目录或父目录中存在 go.work;

  2. 自动将 use 中列出的模块都纳入编译视图;

  3. 如果 A 的 import 引用了 example.com/B,Go 会优先在 workspace 中查找是否存在该模块;

  4. 发现 B 模块在 use ./B 中,于是直接使用本地路径;

  5. 不再去下载远程依赖,也不修改 go.mod。

相关新闻

  • 2025年搓管机全套管实力厂家权威推荐榜单:旋挖全套管/全回转钻机全套管/全回转全套管源头厂家精选
  • 2025广州人力资源服务推荐榜:精典人才领衔,派遣/外包靠谱公司精选3家
  • 51汇编--外部中断

最新新闻

  • 深入解析MCU串口通信:从SCI寄存器配置到LIN、RS-485实战应用
  • 关于我的这片小天地
  • 2026年6月实习管理系统品牌哪个好,实习管理平台/实习系统/实习管理系统,实习管理系统公司在哪找 - 品牌推荐师
  • SQL经典实例——分层查询
  • C++虚函数与运行时多态
  • MC68HC908GZ ESCI模块深度解析:寄存器操作、波特率配置与调试实战

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 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 号