【Go语言成长之路】多模块工作区入门

news/2024/9/18 12:53:03/ 标签: golang, 开发语言, 后端

文章目录

  • 【Go语言成长之路】多模块工作区入门
    • 前提条件
    • 一、创建一个模块
    • 二、创建工作空间
    • 三、创建第二个模块
    • 四、更多关于workspace

【Go语言成长之路】多模块工作区入门

​ 多模块工作区(muti-module workspaces)可以使得开发者在多个模块中构建并且运行代码,相互独立,互不干扰。

​ 本教程中,将会创建两个模块来共享一个多模块工作区,并且跨模块进行更改,在构建中查看这些更改的结果。

前提条件

  • Go1.18以及之后的版本

  • 命令终端。 Go 可以在 Linux 和 Mac 上的任何终端以及 Windows 中的 PowerShell 或 cmd 上正常运行

  • 一个编辑代码的工具(文本编辑器)

一、创建一个模块

  1. 创建工作目录

    创建一个新的工作空间,名称为workspace

    ~$ mkdir workspace
    ~/workspace$ cd workspace
    
  2. 初始化模块

    创建一个新的模块,名称为hello

    ~/workspace$ mkdir hello
    ~/workspace$ cd hello
    ~/workspace/hello$ go mod init example.com/hello
    go: creating new go.mod: module example.com/hello
    

    在 hello 目录下创建 hello.go,内容如下:

    package mainimport ("fmt""golang.org/x/example/hello/reverse"
    )func main() {fmt.Println(reverse.String("Hello"))
    }
    

    可以看到,在代码中,我们有着一个依赖外部包,因此需要使用go get添加对golang.org/x/example/hello/reverse包的依赖:

    ~/workspace/hello$ go get golang.org/x/example/hello/reverse
    go: downloading golang.org/x/example v0.0.0-20240716161537-39e772fc2670
    go: downloading golang.org/x/example/hello v0.0.0-20240716161537-39e772fc2670
    go: added golang.org/x/example/hello v0.0.0-20240716161537-39e772fc2670
    

    最后,运行hello程序

    ~/workspace/hello$ go run hello.go 
    olleH
    

二、创建工作空间

在此步骤中,我们将创建一个 go.work 文件来指定模块的工作区。

  1. 初始化工作空间

    ~/workspace$ go work init ./hello/
    ~/workspace$ cat go.work 
    go 1.23.0 # go 指令告诉 Go 应使用哪个版本的 Go 来解释该文件use ./hello # use 指令告诉 Go 在构建时 hello 目录中的模块应该是主模块。因此,在工作区的任何子目录中,该模块都将处于活动状态。
    

    go work init 命令告诉 go 为包含 ./hello 目录中的模块的工作空间创建一个 go.work 文件。

  2. 运行工作空间目录下的程序

    $ go run ./hello
    olleH
    

    在模块或工作区之外运行 go run 命令会导致错误, 但是在工作区内运行则可以通过。

三、创建第二个模块

  1. 创建模块

    ~/workspace$ mkdir second
    ~/workspace/second$ touch second.go
    package secondimport ("fmt"
    )func Hello() {fmt.Println("second")
    }~/workspace/second$ go mod init example.com/second
    ~/workspace/second$ go mod tidy
    
  2. 将模块添加到工作区

    second模块位于./second内,将其添加到工作区:

    ~/workspace$ go work use second
    

    通过使用go work use命令就成功地将一个新模块添加到工作区内了,添加后的go.work内容如下所示:

    ~/workspace$ cat go.work 
    go 1.23.0use (./hello./second
    )
    
  3. 修改 hello 程序以使用该函数

    package mainimport ("fmt""github.com/pzs/second""golang.org/x/example/hello/reverse"
    )func main() {fmt.Println(reverse.String("Hello"))second.Hello()
    }
    
  4. 添加replace以引用本地包

    修改hello包下的go.mod文件:

    replace github.com/pzs/second => ../second
    

    之后运行go mod tidy命令:

    ~/workspace/hello$ go mod tidy
    go: found github.com/pzs/second in github.com/pzs/second v0.0.0-00010101000000-000000000000
    

    注:若引用的不是本地包,而是外部下载到本地的包修改后引用的话,则可以不使用replace,直接引用即可。默认会直接应用本地的包,而不是外部包。关于具体的例子,可以参考官方的文档: https://go.dev/doc/tutorial/workspaces

  5. 在工作空间中运行代码

    ~/workspace$ go run ./hello/
    olleH
    second
    

    Go命令在go.work文件指定的hello目录中查找命令行指定的example.com/hello模块。

    注:由于这两个模块位于同一工作区中,因此可以轻松地在一个模块中进行更改并在另一个模块中使用它。

四、更多关于workspace

go work的子命令:

  • go work use [-r] [dir]: 将 use 指令添加到 dir 的 go.work 文件中(如果存在),如果参数目录不存在,则删除 use 目录。 -r 标志递归地检查 dir 的子目录。
  • go work edit: 编辑 go.work 文件,类似于 go mod edit
  • go work sync 将工作区构建列表中的依赖项同步到每个工作区模块中。

有关工作区和 go.work 文件的更多详细信息,请参阅 Go 模块参考中的Workspaces 。


http://www.ppmy.cn/news/1517128.html

相关文章

在浏览器上使用transformers.js运行(WebGPU)RMBG-1.4进行抠图(背景移除)

在浏览器上使用transformers.js运行(WebGPU)RMBG-1.4进行抠图(背景移除) 说明: 首次发表日期:2024-08-28官方Github仓库地址: https://github.com/xenova/transformers.js/tree/main/examples…

《深入浅出WPF》读书笔记.8路由事件

《深入浅出WPF》读书笔记.8路由事件 背景 路由事件是直接响应事件的变种。直接响应事件,事件触发者和事件响应者必须显示订阅。而路由事件的触发者和事件响应者之间的没有显示订阅,事件触发后,事件响应者安装事件监听器,当事件传…

SpringBoot -在Axis2中,RPCServiceClient调用WebService

在 Axis2 中,RPCServiceClient 是一种用于调用 WebService 的客户端实现。下面是如何将它们 结合起来使用的一个示例: 步骤 1: 添加依赖 首先,在 pom.xml 文件中添加 Axis2 的相关依赖。 <dependencies><!-- 其他依赖 --><dependency><groupId>…

拓扑排序-

基本原理 就是存在一个入度为0的点和一个出度为0的点 然后图中所有点都是指向同一个方向&#xff1b; /* 拓扑序列&#xff1a; 特点&#xff1a;有向无环图 判断&#xff1a;判断所有的点是否入度为0 换句话 就是入度为0的点个数是否满点的总数 过程&#xff1a;建图、入度数…

2024HarmonyOS应用开发者高级认证最新整理题库和答案(已收录182道 )

更新截止2024-08-27,完整题库一共182道题,足够覆盖90%考题,如有新题和遗漏我会持续补充 所有题目的选项都是打乱顺序的,记答案不要记序号 完整题库请在我的网盘下载或查看在线文档 完整题库在线文档预览 单选(已收录102道) 1 . 以下哪个装饰器用来表示并发共享对象。(B) A. @…

通过Python绘制不同数据类型适合的可视化图表

在数据可视化中&#xff0c;对于描述数值变量与数值变量之间的关系常见的有散点图和热力图&#xff0c;以及描述数值变量与分类变量之间的关系常见的有条形图&#xff0c;饼图和折线图&#xff0c;可以通过使用Python的matplotlib和seaborn库来绘制图表进行可视化表达&#xff…

超详细!!!uniapp通过unipush全流程实现app消息推送

云风网 云风笔记 云风知识库 一、HBuilder新建APP项目 二、配置推送服务 1、登录Dcloud开发者中心开发者中心&#xff0c;查看我的应用 2、生成云端证书 3、创建平台信息 4、配置推送服务信息 这里需要关联服务空间&#xff0c;可以申请免费服务空间进行测试 三、代码配置 1…

Java笔试面试题AI答之线程(24)

文章目录 139. 简述为什么 wait(), notify()和 notifyAll()必须在同步方法或 者同步块中被调用&#xff1f;140. 简述为什么 Thread 类的 sleep()和 yield ()方法是静态的 &#xff1f;1. sleep() 方法2. yield() 方法总结 141. 简述同步方法和同步块&#xff0c;哪个是更好的选…

hydra密码爆破工具详细使用教程

Hydra是一个强大的密码爆破工具&#xff0c;可以用来测试网络系统的弱口令。下面是使用Hydra的基本教程&#xff1a; 1. 安装Hydra 可以从Hydra的官方网站&#xff08;https://github.com/vanhauser-thc/thc-hydra&#xff09;下载最新版本的Hydra&#xff0c;并按照安装说明进…

spring boot 配置监听多端口

如何实现Spring Boot配置监听多端口 1. 概述 在Spring Boot应用中&#xff0c;有时候需要监听多个端口&#xff0c;比如同时监听HTTP和HTTPS端口。本文将介绍如何实现在Spring Boot应用中配置监听多端口。 2. 流程表格 步骤 操作 1 添加依赖 2 创建多端口配置类 3 …

turtlebot 测试 Gazebo Harmonic ROS Jazzy

源码移植后理论上支持所有Gazebo和ROS版本&#xff0c;但花费时间较多。 只推荐学习Gazebo 经典版和Gazebo Harmonic以及之后版本。 在中间的过渡版本&#xff0c;不推荐学习。 Gazebo经典版包括Gazebo 7 Gazebo 9 Gazebo 11。 Gazebo Harmonic 和 ROS2 jazzy 安装和测试-CSDN博…

vue3+ts el-table 鼠标移动到某单元格内时就显示 tooltip

在Vue 3和Element Plus中&#xff0c;要在鼠标移动到表格某个单元格上时显示tooltip&#xff0c;可以使用el-tooltip组件&#xff0c;并结合表格的cell-mouse-enter和cell-mouse-leave事件。 <template> <el-table :data"tableData" cell-mouse-e…

深度学习-批量与动量【Datawhale X 李宏毅苹果书 AI夏令营】

实际工程中使用批量和动量可以对抗鞍点或局部最小值。 批量&#xff1a; 在计算梯度的时候不会用所有数据计算损失。类比我们考试复习时&#xff0c;一个单元一个单元的知识点输入&#xff0c;所有单元都输入就是一整个轮回。而这一个单元用深度学习的术语来说就是批量&#x…

CSRF 概念及防护机制

概述 CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;即跨站请求伪造&#xff0c;是一种网络攻击方式。在这种攻击中&#xff0c;恶意用户诱导受害者在不知情的情况下执行某些操作&#xff0c;通常是利用受害者已经登录的身份&#xff0c;向受害者信任的…

【精选】基于数据可视化的智慧社区内网平台

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

华为AC旁挂二层组网配置详解:从DHCP部署到无线业务配置,完成网络搭建

组网需求 AC组网方式&#xff1a;旁挂二层组网。 DHCP部署方式&#xff1a; AC作为DHCP服务器为AP分配IP地址。 防火墙作为DHCP服务器为STA分配IP地址。 业务数据转发方式&#xff1a;直接转发。 网络拓扑图 对于旁边路直接转发&#xff0c;优点就是数据流量不经过AC&…

决策树和随机森林介绍

hello大家好&#xff0c;俺是没事爱瞎捣鼓又分享欲爆棚的叶同学&#xff01;&#xff01;&#xff01;今天我来给大家介绍一下决策树与随机森林&#xff0c;说起随机森林俺还有件很久远的丑事&#xff0c;之前有关课的结课作业就是用模型训练并预测&#xff0c;那时我比较天真&…

OpenCV(第二关--读取图片和摄像头)实例+代码

以下内容&#xff0c;皆为原创&#xff0c;制作不易&#xff0c;感谢大家的关注和点赞。 一.读取图片 我们来读取图片&#xff0c;当你用代码读取后&#xff0c;可能会发现。怎么跟上传的图片颜色有些许的不一样。因为OpenCV的颜色通道是BGR&#xff0c;而我们平常用的matplotl…

百日筑基第六十天-学习一下Tomcat

百日筑基第六十天-学习一下Tomcat 一、Tomcat 顶层架构 Tomcat 中最顶层的容器是 Server&#xff0c;代表着整个服务器&#xff0c;从上图中可以看出&#xff0c;一个 Server可以包含至少一个 Service&#xff0c;用于具体提供服务。Service 主要包含两个部分&#xff1a;Conn…

Flask SQLALchemy 的使用

Flask SQLALchemy 的使用 安装 Flask-SQLAlchemy配置 Flask-SQLAlchemy定义模型创建数据库和表插入和查询数据更新和删除数据迁移数据库总结Flask-SQLAlchemy 是一个 Flask 扩展,它简化了 Flask 应用中 SQLAlchemy 的使用。SQLAlchemy 是一个强大的 SQL 工具包和对象关系映射(…