教程:创建一个 Go 模块

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

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

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

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

先决条件

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

首先创建一个 Go 模块。在模块中,为一组离散且有用的函数收集一个或多个相关包。例如,您可以创建一个模块,其中包含具有用于执行财务分析的功能的包,以便编写财务应用程序的其他人可以使用您的工作成果。有关开发模块的详细信息,请参阅开发和发布模块.

Go 代码被分组到包中,包被分组到模块中。你的模块指定了运行你的代码所需的依赖项,包括 Go 版本和它需要的其他模块集.

在模块中添加或改进功能时,您发布模块的新版本。编写调用模块中函数的代码的开发人员可以导入模块的更新包并在将其投入生产使用之前使用新版本进行测试。

  1. 打开命令提示符并cd转到您的home目录.

    在 Linux 或 Mac 上:

    cd
    

    在 Windows 上:

    cd %HOMEPATH%
    
  2. 为你的Go 模块源代码创建greetings目录.

    例如,从您的home目录使用以下命令:

    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 为指定的人返回问候语.
    func Hello(name string) string {
        // 返回在消息中嵌入名称的问候语.
        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 参数的值将完成问候语文本。
    • 将格式化的问候文本返回给调用者.

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