创建Go模块

By | 2021年9月13日

这是介绍Go语言一些基本特性的教程第一部分。如果你是刚开始学习Go,建议先看下Go教程:

在这个教程里我们会创建两个模块。

第一个是可以被其它库或程序引入的库。第二个则是用来调用第一个模块的程序。

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

  1. 创建一个module — 编写一个简单的能从其它module调用的module。
  2. 从其它module调用你的代码 — 导入并使用你的新module
  3. 返回和处理异常 — 增加简单的错误处理。
  4. 返回一个随机的问候 — 处理slices中的数据(go语的动态大小数组)。
  5. 返回多人的问候 — 使用map保存key/value
  6. 增加Test用例 — 使用Go内置的单元测试功能区测试你的代码。
  7. 编译和安装程序 — 编译和安装你的代码。

准备

  • 一些编程经验。代码非常简单,但是能帮助了解到关于函数、循环和数组等一些概念。
  • 代码编辑工具。任何一款文本编辑器都能支持。很多文本编辑器都支持Go语言,非常流行的包括VsCode(免费),GoLand(收费),以及Vim(免费)。
  • 命令行终端。Go在Linux和Mac下使用Terminal能正常使用,windows则可使用PowerShell或者cmd命令行。

新建供别人使用的Module

首先创建一个Go Module。在一个module里,您可以为一组离散且有用的函数收集一个或多个相关包。例如,您可以创建一个Module,其中的包具有进行财务分析的功能,以便其他编写财务应用程序的人可以使用您的工作。

Go代码被分组到包中,包被分组到模块中。您的模块指定运行代码所需的依赖项,包括Go版本及其所需的其他模块集。

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

  1. 打开命令行并进入home目录

    在Linux 或者 Mac:

    cd
    

    Windows:

    cd %HOMEPATH%
    
  2. 创建一个目录用于保存该Module的代码

    比如,可以在home目录使用以下命令:

    mkdir greetings
    cd greetings
    
  3. 使用命令go mod init command

    根据module的路径,执行 go mod init命令,这里使用example.com/greetings。如果你需要发布一个module,这个路径必须是module能通过Go tools下载的路径。可以是你的代码仓库。如果需要更多的module path的信息,可以参考这里 Managing dependencies.

    $ 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. 将下列代码写到你的文件里并保存.

    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接口返回招呼。

    • 这个函数传入name参数,类型是string。函数同时也返回string的值。在Go语言里,函数名以大写字母开始的函数可以被同一个package里的其它函数调用。这在go里被称为exported name。有关信息可以在 Exported names 指南里找到

      img

  • 定义了一个message去保存返回值

    ​ 在Go里面,:=操作符是一个定义并初始化变量的快捷方式。实际上和下面代码等价:

    var message string
    message = fmt.Sprintf("Hi, %v. Welcome!", name)

  • 使用 fmt 包的 Sprintf 函数创建问候消息。

  • 第一个参数是格式字符串,Sprintf 用 name 参数的值替换 %v 格式动词。插入 name 参数的值完成问候文本。

  • 将格式化的问候文本返回给呼叫者。

下一个步骤,你将会从别的module发起这个函数的调用。

请关注公众号获取更多资料

发表评论

电子邮件地址不会被公开。 必填项已用*标注