我正在尝试Go的新模块系统,在访问本地包时遇到了麻烦。下面的项目在我的桌面上的一个文件夹中,在我的gopath之外。
我的项目结构如下:
/
- /platform
- platform.go
- main.go
- go.mod
// platform.go
package platform
import "fmt"
func Print() {
fmt.Println("Hi")
}
// main.go
package main
import "platform"
func main() {
platform.Print()
}
go build main.go
告诉我
cannot find module for path platform
型
4条答案
按热度按时间kninwzqo1#
让我定义第一个
modules
是packages
的集合。在Go 11中,我像下面这样使用go modules:如果两个包都在同一个项目中,您可以执行以下操作:在
go.mod
中:module github.com/userName/moduleName
在您的
main.go
中import "github.com/userName/moduleName/platform"
但是,如果它们是独立的模块,即不同的物理路径,并且您仍然希望导入本地
packages
而不将其远程发布到github,则可以使用replace
指令来实现。给定模块名称
github.com/otherModule
和platform
,正如您所称的,它是其中唯一的包。在主模块的go.mod
中添加以下行:字符串
注意:路径应该指向模块的根目录,可以是绝对路径,也可以是相对路径。
在
main.go
中,要从otherModule
导入特定的软件包,如platform
:型
这里是gentle introduction到Golang模块
qij5mzcb2#
我强烈建议你使用go工具链,它可以开箱即用地解决这些问题。Visual Studio Code with vscode-go插件非常有用。
这里的问题是Go需要在import语句中使用
$GOPATH/src
或module
的相对路径。根据您在GOPATH
中的位置,导入路径也应该包括它。在这种情况下,import语句必须包括go.mod
中的go模块路径GOPATH
假设您的项目位于以下位置:
字符串
导入路径应为:
型
VGO
假设你的go.mod文件是:
型
导入路径应为:
型
bksxznpy3#
作为一个新来的人,我没有立即理解公认的答案-这是伟大的,顺便说一句。这里有一个简短的答案,为这些非常新的人!
In go模块/包表示为您在代码中导入的url:
字符串
但是等等!我的代码不在URL中,发生了什么??
这就是围棋的聪明之处。你假装有一个网址,即使没有一个。因为:
1.这使得包括更容易,因为无论您的文件位于何处,导入都使用相同的url(即使文件移动,代码也保持不变!)
1.您可能会有命名恩怨的套件。因此,
google.com/go-api/user
不会与your.org/internal/user
处的定义冲突1.有一天你可能会在GitHub上发布一个url,所有的代码都会正常工作
Evan,这很好,但是如何导入相对路径呢?
问得好!您可以将
go.mod
档案变更为具有下列行来汇入:型
sxpgvts34#
鉴于Golang项目的结构
字符串
从**/platform**的本地包访问方法或结构...等(它们是公共的)很简单,如下所示
// main.go package main
型
这个应该能用