无法从其他项目导入本地项目:找不到提供包的模块 <package_name>

Can't import local project from other project: cannot find module providing package <package_name>

我有一个项目,名为 project1
几个月前,我在 project2 上工作,其中包含名为 engine 的包,我想在 project1.
中使用它 这些项目是本地的,所以我阅读了 如何导入本地项目并进行了尝试但收到错误消息:

Cannot resolve file `project2`

一件有趣的事情是,当我在 import(..) 部分键入 project2 的名称时,Goland 将其识别为模块,但在我按下它之后,我收到了它不能的错误下定决心。

使用 Goland 我可以选择 运行 sync packages of 'project1' 但是当我按下它时我也收到了一个错误:

project1/pkg/utils imports
    project2: cannot find module providing package project2

我还尝试在 project1 中创建 vendor 文件夹并将整个 project2 复制粘贴到 vendor 文件夹下,但仍然没有帮助。

知道为什么没有解决吗?

如果您的两个项目都在 $GOPATH 下,您可以查看此 导入项目。

编辑: 如果您正在使用 go modules 并且想要导入本地模块,那么您可以使用 replace 指令。 所以,基本上你必须在你的 go.mod 中添加你的 Project1 这些行:

require /$module-name-project2/$package-name v0.0.0

replace $module-name-project2/$package-name => ../$localpath-to-project2

更多信息here

一个简单的例子(我的两个项目都在 $GOPATH 之外并使用 go modules):

  1. Project1 位于 .../go-experiments/project1
  2. 下方

main.go:

package main

import "go-experiments/project2/greeting"

func main() {
    println("How to greet?")

    greeting.English()
}

go.mod:

module go-experiments/project1

require go-experiments/project2/greeting v0.0.0

replace go-experiments/project2/greeting => ../project2

go 1.14
  1. Project2 位于 .../go-experiments/project2greeter.go:
package greeting

func English() {
   println("hi, i am boo")
}

go.mod:

module go-experiments/project2

go 1.14