调用Module接口

By | 2021年9月14日

在前面的教程中,我们创建了greeting的module。 Create a Go module

在这节,我们将会编码去调用这个mdule里的hello函数。

我们准备编写一个可执行的能调用greetingmodule程序。

  1. 创建hello目录,用于保存代码。这里将会是我们开发的源目录。

    创建成功后,我们看下目录的结构,在home目录下应该包含greetings和hello(greetings目录是上一节创建的目录)

    <home>/
    |-- greetings/
    |-- hello/
    

    如果你正在greetings这个目录,可以用以下命令:

    cd ..
    mkdir hello
    cd hello
    
  2. 把代码需要使用的依赖打开跟踪,使用go mod init命令。

    在这里我们保持使用 example.com/hello

    $ go mod init example.com/hello
    go: creating new go.mod: module example.com/hello
    
  3. 我们创建文件 hello.go,用于保存我们的代码。

  4. 准备开始编写,将以下内容写入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 package。
  • 引入两个包:example.com/greetings和fmt 。 这样可以获得这些包的函数的使用权。引入example.com/greetings可以访问Hello function,同样,引入fmt可以使用处理输入输出的函数。
  • 通过greetings的Hello函数获取greeting返回。
  1. 编译hello模块,将会访问本地的example.com/greetings

    如果是用于生产环境,我们需要发布example.com/greetings模块,这样Go tool才能访问和下载。

    但是现在我们还没有发布该模块,我们需要适配hello模块,使得它能通过本地文件系统访问。

    为了实现这样的目标,我们要使用go mod edit 命令,实现Go tool重定向到本地目录上。

    我们需要在Hello目录下执行:

    $ go mod edit -replace example.com/greetings=../greetings
    

    这个命令指定example.com/greetings在查找依赖的时候将会被../greetings替换。执行该命令后,go.mod文件将会增加重定向的配置项。

    module example.com/hello
    
    go 1.16
    
    replace example.com/greetings => ../greetings
    

    接下来我们执行执行命令go mod tidy

    $ 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
    

    该命令在greeting目录中找到了本地代码,然后添加了一个require指令要指定example.com/hello需要example.com/greeting。您在hello.go中导入“问候语”包时创建了此依赖项。

    模块路径后面的数字是伪版本号——一个生成的数字,用于代替语义版本号(模块还没有)。

    要引用published模块,go.mod文件通常会省略’replace’指令,并使用一个’require’指令,该指令末尾带有标记的版本号。

    require example.com/greetings v1.1.0
    

    要获取更多关于版本号的信息可访问 Module version numbering.

  2. 到此,我们可以执行我们的代码了。在hello目录下执行:

    $ go run .
    Hi, Gladys. Welcome!
    

恭喜,你完成了Module的编写和调用。

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

发表评论

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