引用本地的 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 包中的函数和变量应以大写字母开头,以便从包本身外部访问。
祝你好运!
我从本地项目(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 包中的函数和变量应以大写字母开头,以便从包本身外部访问。
祝你好运!