教程:创建 Go 模块

这是介绍 Go 语言一些基本功能的教程的第一部分。如果您刚开始学习 Go,请务必查看教程:Go 入门,其中介绍了 go 命令、Go 模块和非常简单的 Go 代码。

在本教程中,您将创建两个模块。第一个是库,旨在供其他库或应用程序导入。第二个是调用者应用程序,它将使用第一个模块。

本教程的序列包括七个简短的主题,每个主题都阐述了语言的不同部分。

  1. 创建模块——编写一个带有函数的小模块,您可以从另一个模块调用这些函数。
  2. 从另一个模块调用您的代码——导入并使用您的新模块。
  3. 返回并处理错误——添加简单的错误处理。
  4. 返回随机问候语——处理切片(Go 的动态大小数组)中的数据。
  5. 返回多人的问候语——将键/值对存储在映射中。
  6. 添加测试——使用 Go 的内置单元测试功能测试您的代码。
  7. 编译并安装应用程序——在本地编译并安装您的代码。

先决条件

启动一个可供他人使用的模块

首先创建一个 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 工具可以下载您的模块的路径。那将是您的代码仓库。

    有关使用模块路径命名模块的更多信息,请参阅管理依赖项

    $ 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 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 函数以返回问候语。

      此函数接受一个类型为 stringname 参数。该函数还返回一个 string。在 Go 中,名称以大写字母开头的函数可以被不在同一个包中的函数调用。这在 Go 中称为导出名称。有关导出名称的更多信息,请参阅 Go tour 中的导出名称

    • 声明一个 message 变量来保存您的问候语。

      在 Go 中,:= 运算符是在一行中声明和初始化变量的快捷方式(Go 使用右侧的值来确定变量的类型)。如果写成冗长的形式,您可能会这样写

      var message string
      message = fmt.Sprintf("Hi, %v. Welcome!", name)
      
    • 使用 fmt 包的 Sprintf 函数创建问候消息。第一个参数是格式字符串,Sprintfname 参数的值替换 %v 格式动词。插入 name 参数的值完成问候文本。
    • 将格式化的问候文本返回给调用者。

在下一步中,您将从另一个模块调用此函数。