本文翻译自《Tutorial: Create a Go module》。
目录
这是介绍Go语言的一些基本特性的教程的第一部分。如果你刚刚开始使用Go,请务必查看教程:Go入门,其中介绍了go
命令、Go模块和非常简单的Go代码。
在本教程中,你将创建两个模块。第一个是旨在由其他库或应用程序导入的库。第二个是将调用第一个模块的应用程序。
本教程的顺序包括七个简短的主题,每个主题都说明了该语言的不同部分。
1 创建一个模块——编写一个小模块,其中包含可以被另一个模块调用的函数。
2 从另一个模块调用你的代码——导入并使用你的新模块。
3 返回并处理一个错误——添加简单的错误处理程序。
4 返回一个随机问候语——处理切片中的数据(Go的动态大小数组)。
5 回复多个人的问候语——在一个映射(map)中存储键/值对。
6 添加一个测试——使用Go内置的单元测试功能来测试你的代码。
7 编译和安装这个应用程序——在本地编译和安装你的代码。
注意:有关其他教程,请参阅教程。
先决条件
- 一些编程经验。此处的代码非常简单,但有助于了解有关函数、循环和数组的一些知识。
- 一个编辑代码的工具。你拥有的任何文本编辑器都可以正常工作。大多数文本编辑器都对 Go 有很好的支持。最受欢迎的是VSCode(免费)、GoLand(付费)和Vim(免费)。
- 一个命令行终端。Go在Linux和Mac的任何终端以及Windows中的PowerShell或 cmd上都能很好地工作。
创建一个其他人可以使用的模块
首先创建一个Go模块。在一个模块中,一组离散且有用的功能集合构成一个或多个相关包。例如,你可以创建一个模块,其中的包具有进行财务分析的功能,以便其他编写财务应用程序的人可以使用你的工作。有关开发模块的更多信息,请参阅开发和发布模块。
Go代码被分组到包中,包又被分组到模块中。你的模块指定运行代码所需的依赖项,包括Go版本和它需要的其他模块集。
当你在模块中添加或改进功能时,你发布了该模块的新版本。编写调用模块中函数的代码的开发人员可以导入模块的更新后的包并可以在将其投入生产使用之前使用新版本进行测试。
1 打开命令行提示符并cd
到你的家目录。
在Linux或Mac上:
cd
在Windows上:
cd %HOMEPATH%
2 为你的Go模块源代码创建一个greetings
目录。
例如,在你的家目录使用以下命令:
mkdir greetings
cd greetings
3 使用go mod init
命令启动你的模块。
运行go mod init
命令,并传给它你的模块路径作为参数——在这里,使用example.com/greetings
。如果你发布一个模块,这必须是该模块可以被Go工具下载的路径的一部分。另一部分路径将是你的代码存储库的URL。
有关使用模块路径命名模块的更多信息,请参阅管理依赖项。
$ go mod init example.com/greetings
go: creating new go.mod: module example.com/greetings
go mod init
命令创建一个go.mod文件来跟踪代码的依赖项。到目前为止,该文件仅包含你的模块名称和你的代码支持的Go版本。但是当你添加依赖项时,go.mod文件将列出你的代码所依赖的版本。这使构建可重现,并让你直接控制要使用的模块及其版本。
4 在你的文本编辑器中,创建一个用于编写代码的文件,并将其命名为greetings.go。
5 将以下代码粘贴到你的greetings.go文件中并保存该文件。
package greetings
import "fmt"
// Hello函数返回对名字由name参数给出的人的一句问候语。
func Hello(name string) string {
// 返回一句问候语,把name参数的值嵌入其中。
message := fmt.Sprintf("Hi, %v. Welcome!", name)
return message
}
这是你的模块的第一个代码块。它向任何请求Hello
函数的调用者返回一句问候语。你将在下一步中编写调用此函数的代码。
在此代码中,你:
- 声明一个
greetings
包来收集相关的功能。
- 实现一个
Hello
函数来返回一句问候语。
该函数接受一个name
参数,其类型为字符串(string
)类型。该函数还返回一个字符串。在Go中,一个名字以大写字母开头的函数可以被不在同一个包中的函数调用。这在Go中被称为导出名称(Exported names)。有关导出名称的更多信息,请参阅Go教程中的导出名称。
- 声明一个
message
变量来保存你的问候语。
在Go中,:=
运算符是一种在一行中声明和初始化变量的快捷方式(Go使用右侧的值来确定变量的类型)。从长远来看,你可能会这样写:
var message string
message = fmt.Sprintf("Hi, %v. Welcome!", name)
- 使用
fmt
包的Sprintf
函数创建一句问候语。第一个参数是格式字符串,Sprintf
将name
参数的值替换为%v
格式的谓词。插入name
参数的值即可完成这个问候语文本。
- 将格式化后的问候语文本返回给调用者。
在下一步中,你将从另一个模块调用此函数。