在 go 模块中访问本地包 (go 1.11)

新手上路,请多包涵

我正在试用 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

原文由 David Alsh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 483
2 个回答

我强烈建议您使用 go 工具链,它开箱即用地解决了这些问题。带有 vscode-go 插件的 Visual Studio Code 非常有用。

这里的问题是 Go 在 import 语句中需要相对于您的 $GOPATH/srcmodule 的相对路径。根据您在 GOPATH 中的位置,导入路径也应该包括它。在这种情况下,import 语句必须包含 go 模块路径 go.mod

路径

假设您的项目位于此处:

 $GOPATH/src/github.com/myuser/myproject

您的导入路径应该是:

 import "github.com/myuser/myproject/platform"

VGO

假设你的 go.mod 文件是:

 module example.com/myuser/myproject

您的导入路径应该是:

 import "example.com/myuser/myproject/platform"

原文由 Halil Kaskavalci 发布,翻译遵循 CC BY-SA 4.0 许可协议

让我先定义这个 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/otherModuleplatform 正如您所称,它是其中唯一的包。在您的主模块的 go.mod 添加以下行:

 module github.com/userName/mainModule

require "github.com/userName/otherModule" v0.0.0
replace "github.com/userName/otherModule" v0.0.0 => "local physical path to the otherModule"

注意:路径要指向模块的根目录,可以是绝对路径也可以是相对路径。

main.go 中,从 --- 导入特定的包,如 platform otherModule

 import "github.com/userName/otherModule/platform"

这是对 Golang 模块的简单 介绍

原文由 Muhammad Soliman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题