教程:创建 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 教程中的导出名称

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

      在 Go 中,:= 运算符是用于在一行中声明和初始化变量的快捷方式(Go 使用右侧的值来确定变量的类型)。采用冗长方式,你可以将此写为

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

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