引用本地的 Go 模块

Referencing a Go module that is local

我从本地项目(Go 模块)导入包失败。以下是我正在尝试的内容的简要说明:

我像这样创建了一个 Go 模块包:

  $ cd 
  $ mkdir mymodule
  $ cd mymodule
  $ go mod init github.com/Company/mymodule

然后我在mymodule下面加了hello.go,有点功能

// mymodule/hello.go

package mymodule

func sayHello() string {
    return "Hello"
}

go build 成功了。

请注意,模块尚未推送到 github 存储库 。在我推送到 github 之前,我想使用(也许测试)mymodule。所以我创建了另一个包,如下所示:

  $ cd 
  $ mkdir test
  $ cd test
  $ go mod init github.com/Company/test

然后,在 test 目录下创建了一个新文件 test.go 并在其中尝试导入 mymodule,如下所示:

// test/test.go

import (
    "fmt"
    "github.com/Company/mymodule"
)

func testMyModule() {
    fmt.Println(mymodule.sayHello())
}

但是 go build of test 失败并出现以下错误。给出了什么?

cannot load github.com/Company/mymodule: cannot find module providing package github.com/Company/mymodule

cd 到 github.com/Company/test

尝试go mod edit --replace=github.com/Company/mymodule=../mymodule

测试模块中的go.mod可以是:

module github.com/Company/test
require github.com/Company/mymodule v0.0.0
replace github.com/Company/mymodule v0.0.0 => ../mymodule
go 1.12

PS。 sayHello函数名必须大写。然后它变成 public 并可导出到其他模块。

在解析您的 go.mod 中的依赖项时,Go 将尝试通过从您提供的远程 URL 中获取第三方模块来解析它们。

远程 URL 不存在,除非您已将其推送到 GitHub。这是当您收到如下错误时:

cannot load github.com/Company/mymodule: cannot find module providing package github.com/Company/mymodule

本地模块有一个解决方法,您可以在 go.mod 文件中使用 replace 关键字。

replace github.com/Company/mymodule v0.0.0 => ../mymodule

这会让 Go 知道在哪里可以找到您的本地依赖项。只需确保使用正确的模块相对路径即可。

完成本地测试并将模块推送到存储库后,您可以从 go.mod 中删除 replace 行并使用

go get -u github.com/Company/mymodule`

让模块与您当前的项目一起正确工作。

作为旁注,Go 包中的函数和变量应以大写字母开头,以便从包本身外部访问。

祝你好运!