Go语言中使用工作区模式解决私有包不方便调试的问题

Go语言的学习路线 在学习Go语言之前,我们首先了解一下这门语言的背景和特点。Go语言是一门强大且易于学习的编程语言,适合各种规模的开发项目。通过系统化的学习路线和结合实践,希望每位学习者都能在Go语言的学习旅程中取得丰硕的成果。无论你是初学者还是有一定基础的开发者,只要认真学习,注重实践,就一定能掌握Go语言的精髓,并在实际开发中加以应用。希望本文能为你提供有效的指导,助你在Go语言学习的道路上走得更远。 阅读详情

工作区模式


1 )概述

  • 导入内部开发包,之前有两种处理方式
    • 一种是使用Go Modules的 replace 语句,将远程包替换成本地包的路径
      • 这种注意,在开发完成之后还需将replace去掉再提交到仓库
      • 如果有多个这种内部包,这种操作还是很麻烦的
    • 另一种方式是将包上传到git平台,再使用 Go Modules 来处理依赖问题
      • 这种也是一样,只有提交到远程仓库,才能调试,不适合开发环境
  • 现在有一种,不需要使用上述方式来简便调试内部私有包
  • 这种是 工作区模式,即 (go 1.8 版本之后的模式)
    • 这种跟 Go Path 时代的 workspace 不同的是
    • 它可以支持本地多个 Go Modules 的开发

2 )演示

目录结构如下

  • workspace

    • pkg/
      • go.mod
      • pkg.go
    • project/
      • go.mod
      • main.go
  • 比如,这里 pkg 包的go.mod中声明该包属于 gitlab 平台的,例如: module gitlab.com/xxx/pkg

  • 实际上,并没有在我们的gitlab平台上创建这样一个仓库,这个时候,我们拉取这个包,是拉取不到的

    • $ go mod tidy 是找不到这样一个包的
  • 现在不通过上传这个包的情况下,在project项目中,使用这个包内的属性或方法

  • 在 workspace 目录下初始化一个工作区 $ go work init pkg project

    • 如果有多个工程或包的目录都可以在上面命令中继续添加
  • 之后,在当前目录下,为我们生成一个 go.work 的文件, 内容如下

    go 1.20
    
    use(
      ./gkg
      ./project
    )
    
  • 使用这种方式,不用关心私有包是否上传到远程仓库,即可互相调用

  • 在开发私有包的时候,就可以使用这个 workspace 目录在本地开发完之后

  • 将我们这些包及工程代码分别提交到远程仓库

  • 在实际项目中,多个模块之间,可能还存在其他的依赖

  • 可以在 gowork 所在的目录,也就是我们这个 workspace目录

  • 执行一个 $ go work sync 这个命令就可以同步工作区下面的工程依赖

深入理解 Go 语言:工作区与 GOPATH 的奇妙之旅 GOPATH是 Go 语言的环境变量,它指定了 Go 代码的工作目录。srcpkg和bin。src:存放 Go 源代码。这是我们编写和存储 Go 包和应用程序的地方。pkg:存放编译后的包文件。当我们编译一个包时,生成的对象文件会存储在这里。bin:存放可执行文件。编译后的可执行程序会被放置在此处。工作区和GOPATH是 Go 语言中重要的概念,它们为我们提供了一种有效的方式来组织、管理和构建 Go 项目。通过理解它们的作用和使用方法,我们可以更好地开发和维护 Go 代码。 阅读详情

相关推荐

有限元缺陷:剪切锁死

有限元缺陷:剪切锁死

wsxww11的博客 5191

【golang】工作区与GOPATH

工作区和 GOPATH 的概念和含义是每个 Go 工程师都需要了解的。虽然它们都比较简单,但是说它们是 Go 程序开发的核心知识并不为过。Go 语言提供的很多工具都是在GOPATH 和工作区的基础上运行的,比如上面提到的go build、go install和go get,这三个命令也是我们最常用到的。

m0_53328239的博客 1001

TTL转RS422(B)工业级转换模块设计:从原理到实战部署

在工业自动化与嵌入式系统中,串行通信是实现设备间数据交换的基础。其核心原理在于通过特定的电气标准与协议,将数据位序列化后进行传输。RS422作为一种差分平衡传输协议,相比常见的TTL电平,在抗共模干扰与远距离传输能力上具有显著的技术优势,这使其成为工业现场总线、楼宇自动化等对可靠性要求严苛场景的优选方案。要实现TTL设备与RS422网络的稳定互联,关键在于设计一个能够完成单端信号到差分信号高质量转换的硬件模块。这涉及到差分总线收发器芯片的选型、包含终端电阻与TVS二极管的保护电路设计,以及遵循差分走线规则的

weixin_29195615的博客 342

快速掌握 Go 工作区模式

大家好,我是煎鱼。在 Go 项目的模块管理中,先是 GOPATH,然后到废弃。再到强推 Go modules,从被社区抗拒到 rsc 硬上弓。现在最新要了解的,就是工作区模式(workspace mode)。这是一个在 Go1.18 引入的重要特性。之前一直没提过,今天补全这块的知识点。背景在 Go1.11 起有了 Go modules 后,看起来 Go 模块管理逐步按序有了约束、规范了起来。但也...

EDDYCJY的博客 647

从仿真到实践:两级直接耦合放大电路的静态工作点协同调试指南

本文详细解析了两级直接耦合放大电路的静态工作点协同调试方法,从仿真到实践提供系统指南。重点介绍了Rc2电阻调整技巧、集电极电位测量方法及常见问题排查,帮助工程师解决各级静态工作点相互影响的难题,提升模拟电路设计效率。

weixin_29189373的博客 124

Android Audio - 支持多应用同时录音_Android8.1修改方法

支持多应用同时录音_Android8.1修改方法 源码路径: sdk\frameworks\av\services\audiopolicy\managerdefault\AudioPolicyManager.cpp 需要修改两个位置: audio_io_handle_t AudioPolicyManager::getInputForDevice() 在mpClientInterface-&gt...

iFinelio Tower 的博客 5758

go work 笔记 (多模块工作区)

go work 笔记 (多模块工作区)

云满笔记 9001

Prometheus+Grafana+alertmanager+PrometheusAlert监控告警 实现飞书告警

以上 是以grafana做的邮件告警,但是感觉邮件很少人看。下面是以webhook 可以接入。启动alertmanager (设置 开机在启动)下载prometheusalter 配置文件。这里的告警是基于grafana上搭建的。我们启动PrometheusAlert。写完之后进行重启Prometheus。prometheus 的告警规则。测试 基于我们生产环境做的文档。然后在grafana上导模板。上导入模板就可以 直接引用。访问 grafana页面。重启一下grafana。

墨痕诉清风的博客 859

01 | 工作区和GOPATH

工作区和 GOPATH 的概念和含义是每个 Go 工程师都需要了解的。虽然它们都比较简单,但是说它们是 Go 程序开发的核心知识并不为过。然而,我在招聘面试的过程中仍然发现有人忽略掉了它们。Go 语言提供的很多工具都是在 GOPATH 和工作区的基础上运行的,比如上面提到的go build、go install和go get,这三个命令也是我们最常用到的。

qq_37756660的博客 1272

K230+canMV开发中常见的数据类型转换参考示例

【代码】K230+canMV开发中常见的数据类型转换参考示例。

weixin_47446386的博客 68

传统(经典)粒子群算法(PSO)解决单目标优化问题

智能算法:粒子群算法(particle swarm optimizer)—PSO %原理:(1)种群初始化–N(种群数)–D(个体数)–x(i)(粒子位置)–v(i)(粒子速度) % (2)计算每个粒子的适应度值–而适应度值需要选择适应度函数 % (3)对于每个粒子,使用它的适应度值fit[i]和个体的极值pbest(i)进行比较,如果fit[i]>pbest(i),则pbest(i)=fit[i] % (4)同理,对每个粒子用它的适应值与全局极值进行比较,如果比它大,则

weixin_51631044的博客 1295

Go 1.18 的工作区模式

当一个项目越来越复杂的时候,一定会拆分为多个模块,以便进行代码复用和更好的多人协作开发。假设我们已经有了两个模块flysnow.org/util和flysnow.org/product,模块flysnow.org/product依赖flysnow.org/util。现在有一个需求,需要同时修改这两个模块,以便让flysnow.org/util新增的方法给模块fl...

Seekload 529

PCIe-Orders set Blocks之symbol对齐

有序集的使用场合很多,如在链路link阶段,进入polling后,便开始有序集的发送。一个 Ordered Set Block 包含一个同步头,后跟一个有序集。多通道链路的所有 Lane 必须同时传输相同的有序集,而且有序集的第一个符号定义了有序集的类型。但在PCIE中,8GT/s及以上的速率,采用的是128b/130b编码。128-bit是想要传输的payload,实际会传输130-bit,多出来的2-bit就是sync header。Block有两种,通过Sync header区分:10b:表示data

weixin_44700185的博客 813

GO语言 | go work 神一般的管理 多个module没烦恼

最近手上有个活,需要自己本地包之间进行依赖具体描述如下:设计了如下目录结构,其中关注postman部分,要求核心程序放在internal文件目录,cmd目录存放一个cmd版本的main,wasm目录存放一个wasm版本的main,但cmd和wasm的main都依赖于internal目录下的程序实现。有了目标,原理上很简单,找到办法实现cmd可以导入internal包的方法就可以了。

“逛丢一只鞋”的博客 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Go 1.18工作区模式终极指南:在LiteIDE中高效使用go.work文件

Go 1.18引入的工作区模式(Workspace Mode)彻底改变了多模块项目的开发体验。作为一款专为Go语言设计的轻量级IDE,LiteIDE完美支持这一革命性特性,让开发者能够轻松管理复杂的项目依赖关系。本文将为您详细介绍如何在LiteIDE中充分利用go.work文件,提升开发效率。🎯 ## 什么是Go工作区模式? Go工作区模式允许开发者在单个工作区内同时处理多个Go模块,无需频

gitblog_00361的博客 759

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Go语言调试实战指南】:VS Code调试Go程序的5大核心技巧与避坑方案

wu

ByteVein的博客 1125

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Visual Studio Code Go 扩展加入 Go 官方项目:gopls 语言服务与 Delve 调试的演进之路

本篇技术指南围绕 2020 年 6 月 9 日 VS Code 官方博客发布的重要公告展开(原始文档见 [blogs/2020/06/09/go-extension.md](https://link.gitcode.com/i/b262dedfea7ddd9f936bffd62e90f65b)):**Go 扩展正式由微软移交至 Go 官方团队(Go Team at Google)维护,成为 Go

gitblog_01190的博客 861

终极指南:如何用 VS Code Go 扩展打造高效 Go 语言开发环境

**VS Code Go扩展**是Visual Studio Code中Go语言开发的完整解决方案,提供了智能代码补全、调试、测试和代码导航等核心功能。无论你是Go语言新手还是经验丰富的开发者,这个扩展都能显著提升你的开发效率和工作流程。 ## 🚀 为什么选择VS Code Go扩展? VS Code Go扩展为Go开发者提供了全方位的开发体验,将多个Go工具集成到一个统一的界面中。这个扩展

gitblog_01042的博客 1053

go run main.go 报 undefined:Go 编译单位是包,VSCode 整包运行配置指南

Go 语言的编译模型以包为核心,而非单个文件。当执行 go run main.go 时,编译器仅将指定文件纳入临时包构建范围,同目录下其他文件即使声明为同一 package 也不会参与编译,因此跨文件的函数引用会直接报 undefined 错误。理解这一机制,是正确运行 Go 多文件项目的基础,也能快速定位 go run 报错来源。在日常开发中,无论使用 VSCode 的调试器、任务系统还是 Code Runner,都应配置为对当前文件所在目录执行 go run . 的整包运行方式,才能避免同包函数无法解析

weixin_34199405的博客 642

终极Go扩展故障排除指南:快速解决VS Code Go扩展10大常见问题

VS Code Go扩展是一款为Visual Studio Code提供Go语言支持的强大工具,能帮助开发者实现代码补全、调试、格式化等多种功能。本指南将详细解答使用过程中最常见的10个问题,让你快速摆脱困境,提升Go开发效率。 ## 1. 扩展安装后功能无响应?工具依赖是关键 **问题表现**:安装VS Code Go扩展后,代码补全、格式化等功能完全无法使用。 **解决方案**:这通常是

gitblog_01128的博客 831

Windows 11 安装 Go(Golang)教程

👉 在 Windows 11 上使用 Go:安装:⭐⭐(很简单)配置:⭐(几乎不用)开发体验:⭐⭐⭐⭐⭐Go 是目前最容易上手的高性能后端/批处理语言之一。

brucelee186的博客 1286

Slack Go库常见问题解决方案:故障排除和调试技巧

Slack Go库是Go语言中处理Slack API的官方库,提供了完整的REST API调用和WebSocket实时消息协议支持。但在实际使用过程中,开发者经常会遇到各种问题。本指南将为您提供完整的Slack Go库故障排除和调试技巧。 ## 🔍 开启调试模式快速定位问题 启用调试模式是最直接的故障排除方法。通过在创建客户端时设置`OptionDebug(true)`,可以记录所有API请

gitblog_00438的博客 678

告别go mod replace!Go工作区(go work)的5个高效用法

本文详细介绍了Go 1.18引入的工作区(go work)功能,提供了5个高效用法来替代传统的go mod replace。通过工作区管理,开发者可以简化多模块项目的依赖管理,提升开发效率,实现无缝本地开发和智能依赖解析。文章还涵盖了基础配置、高级技巧和常见问题解决方案,帮助团队标准化协作流程。

weixin_29251131的博客 129

Go语言:记录一下Go语言系统学习的第一天

本文作者分享了自己学习Go语言的经历和心得。作为一个已经掌握多种编程语言的开发者,作者选择Go语言是为了满足后台开发需求。文章详细记录了Go语言的安装过程、常用命令整理(如goversion、gobuild等)、包管理特点,以及通过腾讯镜像解决依赖包下载问题的经验。作者还分享了编写第一段Go代码的感受,认为其语法融合了Java和C的特点。全文以实践为导向,展现了开发者快速掌握新语言的学习路径和实用技巧。

shunzi2016的博客 811

Go语言开发工具全解析

Go语言开发工具生态对提升开发效率至关重要。主要工具包括:1)集成开发环境如Goland和VSCode,提供代码补全、调试等功能;2)调试工具Delve支持高级调试特性;3)依赖管理工具Go Modules;4)测试框架如GoTest和Ginkgo;5)性能分析工具pprof。选择工具需考虑团队规模、项目复杂度等因素,小型团队适合轻量级工具,大型项目需要企业级解决方案。完善的工具链能显著提高代码质量、简化调试流程并优化性能。

weixin_46060074的博客 806

Go1.18 新特性 — 泛型、Fuzzing、work工作区

本文源码:https://github.com/why444216978/go1.18-features-demo Fuzzing Fuzzing,又叫 fuzz testing,中文叫做模糊测试或随机测试。其本质上是一种自动化测试技术,更具体一点,它是一种基于随机输入的自动化测试技术,常被用于发现处理用户输入的代码中存在的bug和问题。 在具体实现上,Fuzzing不需要像单元测试那样使用预先定义好的数据集作为程序输入,而是会通过数据构造引擎自行构造或基于开发人员提供的初...

程序猿的世界 2422
上一篇: MySQL中的开发基于Python的SQL工具类操作数据库简单示例
下一篇: Go语言中的init函数的执行时机
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值