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

2024-01-06 20:28

本文主要是介绍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.20use(./gkg1./project
    )
    
  • 使用这种方式,不用关心私有包是否上传到远程仓库,即可互相调用

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

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

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

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

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

这篇关于Go语言中使用工作区模式解决私有包不方便调试的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577505

相关文章

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC