教程:创建Go模块
这是介绍Go语言一些基本特性的系列教程的第一部分。如果您刚刚开始学习Go,请务必阅读
教程:Go语言入门,该教程介绍了
go命令、Go模块和非常简单的Go代码。
在本教程中,您将创建两个模块。第一个是库,旨在供其他库或应用程序导入。第二个是调用应用程序,它将使用第一个模块。
本教程的序列包含七个简短的主题,每个主题说明该语言的不同部分。
- 创建模块 -- 编写一个包含函数的小模块,可以从其他模块调用这些函数。
- 从另一个模块调用您的代码 -- 导入并使用您的新模块。
- 返回并处理错误 -- 添加简单的 错误处理。
- 返回随机问候语 -- 处理切片(Go的 动态大小数组)中的数据。
- 返回多人问候语 -- 在map(映射)中存储键值对。
- 添加测试 -- 使用Go内置的单元测试 功能来测试您的代码。
- 编译并安装应用程序 -- 在本地编译并安装您的代码。
前置要求
- 一定的编程经验。这里的代码相当 简单,但了解一些关于函数、循环和数组的知识会有所帮助。
- 代码编辑工具。您拥有的任何文本编辑器都可以 正常工作。大多数文本编辑器都对Go有很好的支持。最流行的有 VSCode(免费)、GoLand(付费)和Vim(免费)。
- 命令终端。Go在Linux和Mac的任何终端上 都能很好地工作,在Windows上则在PowerShell或cmd中。
启动一个可供他人使用的模块
首先创建一个Go模块。在一个模块中,您可以收集一个或多个相关的包(package),以提供一组离散且有用的函数。例如,您可以创建一个模块,其中包含具有执行财务分析功能的包,以便其他编写财务应用程序的人可以使用您的工作。有关开发模块的更多信息,请参阅 开发和发布模块。
Go代码被分组为包(package),包被分组为模块(module)。您的模块指定运行代码所需的依赖项,包括Go版本和所需的其他模块集。
当您在模块中添加或改进功能时,您会发布该模块的新版本。编写调用您模块中函数的开发人员可以导入该模块更新的包,并在新版本投入生产使用之前进行测试。
-
打开命令提示符并
cd到您的主目录。在Linux或Mac上:
cd
在Windows上:
cd %HOMEPATH%
-
为您的Go模块源代码创建一个
greetings目录。例如,从您的主目录使用以下命令:
mkdir greetings cd greetings
-
使用
go mod init命令启动您的模块。运行
go mod init命令,提供您的模块路径 -- 这里使用example.com/greetings。如果您发布一个模块, 这必须是一个Go工具可以从中下载您模块的路径。 那将是您代码的仓库。有关使用模块路径命名模块的更多信息,请参阅 管理 依赖项。
$ go mod init example.com/greetings go: creating new go.mod: module example.com/greetings
go mod init命令创建一个go.mod文件来跟踪您的 代码的依赖项。到目前为止,该文件仅包含您的 模块名称和您的代码支持的Go版本。但是,当您添加依赖项时, go.mod文件将列出您的代码所依赖的版本。这使得构建具有可重现性,并让您能够直接控制使用哪个模块版本。 - 在文本编辑器中,创建一个用于编写代码的文件,并将其命名为 greetings.go。
-
将以下代码粘贴到您的greetings.go文件中并保存文件。
package greetings import "fmt" // Hello returns a greeting for the named person. func Hello(name string) string { // Return a greeting that embeds the name in a message. message := fmt.Sprintf("Hi, %v. Welcome!", name) return message }这是您模块的第一段代码。它向任何 请求问候语的调用者返回一个问候语。您将在下一步编写调用此函数的代码。
在这段代码中,您:
-
声明一个
greetings包以收集相关函数。 -
实现一个
Hello函数来返回问候语。该函数接收一个类型为
string的name参数,并返回一个string类型的值。在 Go 中,函数名以大写字母开头时,可被其他包中的函数调用。这在 Go 中被称为“导出名称”。有关导出名称的更多信息,请参阅 Go 语言之旅中的 导出名称 章节。
-
声明一个
message变量来保存您的问候语。在 Go 中,
:=操作符是一种在一行内声明并初始化变量的快捷方式(Go 会使用右侧的值来推断变量类型)。如果采用较长的写法,您可能会这样写:var message string message = fmt.Sprintf("Hi, %v. Welcome!", name) -
使用
fmt包的Sprintf函数 来创建问候消息。第一个参数是一个格式字符串,Sprintf会将name参数的值替换到%v格式化动词的位置。插入name参数的值后,完整的问候文本便形成了。 - 将格式化后的问候文本返回给调用者。
-
声明一个
在下一步中,您将从另一个模块调用此函数。