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

2024-08-27 07:44

本文主要是介绍【Go语言成长之路】多模块工作区入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 【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 。

这篇关于【Go语言成长之路】多模块工作区入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

Python AST 模块实战演示

《PythonAST模块实战演示》Python的ast模块提供了一种处理Python代码的强大工具,通过解析代码生成抽象语法树(AST),可以进行代码分析、修改和生成,接下来通过本文给大家介绍Py... 目录 什么是抽象语法树(AST)️ ast 模块的核心用法1. 解析代码生成 AST2. 查看 AST

Go 使用环境变量的实现小结

《Go使用环境变量的实现小结》作为软件开发人员,在项目中管理配置变量的重要性,本文主要介绍在Golang中处理环境变量的强大工具github.com/joho/godotenv包,利用这个包,你可以... 目录步js骤 1:安装步骤 2:制作 .env 文件步骤android 3:加载环境变量步骤 4:利用

C#借助Spire.XLS for .NET实现Excel工作表自动化样式设置

《C#借助Spire.XLSfor.NET实现Excel工作表自动化样式设置》作为C#开发者,我们经常需要处理Excel文件,本文将深入探讨如何利用C#代码,借助强大的Spire.XLSfor.N... 目录为什么需要自动化工作表样式使用 Spire.XLS for .NET 实现工作表整体样式设置样式配置