创建一个GO模块

文章目录

  • 创建一个GO模块
  • 一、说明
  • 二、准备
  • 三、开始一个别人能使用的模块


一、说明

这是介绍一些GO语言基本特性教程的第一部分。如果你是第一次使用Go,确保看一眼Go简单入门指导,这篇文章介绍了go命令,go模块,和一个简单的go代码。

在这篇知道中,你讲创建两个模块。第一个是一个库,为了能让其它的库和应用导入。第二个是一个调用者应用,它将使用第一个模块。

本教程的序列包含了七个简单的主题,每一个都阐明了一个语言的不同部分。

  1. 创建一个模块。写一个带有函数的模块,你能在其它的模块调用;
  2. 从另一个模块调用你的代码。带入并使用你的新模块;
  3. 返回和处理一个错误。添加简单的错误处理;
  4. 返回一个随机的问候。用切片处理数据(Go的动态大小数据);
  5. 为多个人返回问候语。存储key-valur对到map中;
  6. 添加一个测试。使用Go内置的单元测试机制来测试你的代码;
  7. 编译和安装应用。编译并安装你的代码到本地。

二、准备

  • 有一些编程经历;
  • 一个编写代码到工具;
  • 一个命令终端;

三、开始一个别人能使用的模块

从创建一个Go模块开始。在一个模块中,你为一个离散的和有用的函数集收集一个或多个有关的包。例如,你能使用带有做金融分析函数的包创建一个模块,以便于别人在写金融应用的时候能够使用你的工作。

Go代码是被分组成包,并且包是被分组成模块。你的模块指定了运行你代码需要的依赖,包括Go的版本,和其它需要的模块集。

当你在模块中添加或优化功能,你发布模块的新版本。开发者写调用你模块函数的代码,能够导入已经更新的模块,在发布到生产去使用之前进行测试。

  1. 打开一个命令提示符,进入到你的主目录;
$ cd
$
  1. 为你的Go模块源代码创建一个"greetings"文件夹;
$ mkdir greetings
$ cd greetings/
$
  1. 使用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文件将列出你代码依赖的版本。这保持了构建的可重现,并且能够直接控制模块版本的使用。

$ ll
total 8
drwxr-xr-x  3 lifei  staff   96  8 17 00:07 ./
drwxr-xr-x  4 lifei  staff  128  8 17 00:03 ../
-rw-r--r--  1 lifei  staff   38  8 17 00:07 go.mod
$ cat go.mod
module example.com/greetings

go 1.18
$
  1. 在你的文本编辑器上,创建一个文件,在上面写你的代码,把它叫做"greetings.go";
  2. 复制下面的代码到greetings.go文件中,并保存文件;
package greetings

import "fmt"

// Hello 为一个命名的人返回一个问候
func Hello(name string) string {
  // 返回一个问候,嵌套名字在消息中
  message := fmt.Sprintf("Hi, %v. Welcome!", name)
  return message
}

这是你的模块的第一段代码。它给任何调用者返回一个问候。你将在下一部分写代码调用这个函数。

在这个代码中:

  • 声明了一个“greeting”包,用于收集相关函数;
  • 实现了“Hello”函数,返回一个问候;
  • 这个函数需要一个string类型的name参数,这个函数也返回一个string。在Go中,一个函数它的名字使用一个大写字母开始,它能够被不在相同包的函数调用。这个Go中被称为导出名称。
  • 声明一个message变量持有你的问候;
    在Go中,:=操作符是一个快捷方式,用于在一行中声明和初始化一个变量(Go使用右边的值来确定变量的类型)。
    多走一步,你也能这样写:
var message string
message = fmt.Sprintf("Hi, %v. Welcome!", name)
  • 使用fmt 包的Sprintf函数去创建一个问候语。第一个参数是格式化的字符串,并且Sprintf用name参数的值替换%v格式动词。插入name的值,完成问候语。
  • 将已经格式化后的问候语返回给调用者;