从另一个模块调用你的代码
在上一部分中,你创建了一个greetings
模块。在本部分中,你将编写代码来调用你刚编写的模块中的Hello
函数。你将编写可以作为应用程序执行的代码,并调用greetings
模块中的代码。
-
为你的 Go 模块源代码创建一个
hello
目录。这是你编写调用者的位置。创建此目录后,您应该在层次结构中同时拥有一个 hello 和一个 greetings 目录,如下所示
<home>/ |-- greetings/ |-- hello/
例如,如果您的命令提示符位于 greetings 目录中,您可以使用以下命令
cd .. mkdir hello cd hello
-
为即将编写的代码启用依赖项跟踪。
要为您的代码启用依赖项跟踪,请运行
go mod init
命令,并为其指定您的代码所在的模块的名称。出于本教程的目的,请为模块路径使用
example.com/hello
。$ go mod init example.com/hello go: creating new go.mod: module example.com/hello
- 在文本编辑器中,在 hello 目录中,创建一个文件来编写代码,并将其称为 hello.go。
-
编写代码来调用
Hello
函数,然后打印该函数的返回值。为此,请将以下代码粘贴到 hello.go 中。
package main import ( "fmt" "example.com/greetings" ) func main() { // Get a greeting message and print it. message := greetings.Hello("Gladys") fmt.Println(message) }
在此代码中,您
-
声明一个
main
包。在 Go 中,作为应用程序执行的代码必须位于main
包中。 -
导入两个包:
example.com/greetings
和fmt
包。这使您的代码可以访问这些包中的函数。导入example.com/greetings
(您之前创建的模块中包含的包)使您可以访问Hello
函数。您还导入fmt
,其中包含用于处理输入和输出文本的函数(例如将文本打印到控制台)。 -
通过调用
greetings
包的Hello
函数来获取问候语。
-
声明一个
-
编辑
example.com/hello
模块以使用您本地的example.com/greetings
模块。对于生产用途,您需要从其存储库中发布
example.com/greetings
模块(使用反映其已发布位置的模块路径),Go 工具可以在其中找到它以下载它。现在,由于您尚未发布该模块,因此您需要调整example.com/hello
模块,以便它可以在您的本地文件系统上找到example.com/greetings
代码。为此,请使用
go mod edit
命令 编辑example.com/hello
模块,将 Go 工具从其模块路径(模块不存在的地方)重定向到本地目录(模块存在的地方)。-
从 hello 目录中的命令提示符运行以下命令
$ go mod edit -replace example.com/greetings=../greetings
该命令指定
example.com/greetings
应替换为../greetings
以便定位依赖项。运行命令后,hello 目录中的 go.mod 文件应包含一个replace
指令module example.com/hello go 1.16 replace example.com/greetings => ../greetings
-
从 hello 目录中的命令提示符运行
go mod tidy
命令 以同步example.com/hello
模块的依赖项,添加代码所需的依赖项,但尚未在模块中跟踪这些依赖项。$ go mod tidy go: found example.com/greetings in example.com/greetings v0.0.0-00010101000000-000000000000
命令完成后,
example.com/hello
模块的 go.mod 文件应如下所示module example.com/hello go 1.16 replace example.com/greetings => ../greetings require example.com/greetings v0.0.0-00010101000000-000000000000
该命令在 greetings 目录中找到了本地代码,然后添加了
require
指令 以指定example.com/hello
需要example.com/greetings
。在 hello.go 中导入greetings
包时,您创建了此依赖项。模块路径后面的数字是一个伪版本号 -- 一个生成数字,用于代替语义版本号(该模块还没有语义版本号)。
要引用已发布模块,go.mod 文件通常会省略
replace
指令,并使用带有末尾标记版本号的require
指令。require example.com/greetings v1.1.0
有关版本号的更多信息,请参阅 模块版本编号。
-
从 hello 目录中的命令提示符运行以下命令
-
在
hello
目录的命令提示符下,运行您的代码以确认其是否有效。$ go run . Hi, Gladys. Welcome!
恭喜!您已经编写了两个功能模块。
在下一个主题中,您将添加一些错误处理。