首页 > 解决方案 > 无法从其他项目导入本地项目:找不到提供包的模块

问题描述

我有一个名为project1.
几个月前,我研究了project2哪个包含名为的包engine,我想在里面使用它project1
这些项目是本地的,所以我在这里阅读了如何导入本地项目并尝试过但收到错误:

Cannot resolve file `project2`

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

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

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

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

知道为什么它没有解决吗?

标签: goimportgoland

解决方案


如果您有两个项目$GOPATH,则可以查看此示例以导入项目。

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

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

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

更多信息在这里

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

  1. Project1位于.../go-experiments/project1

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/project2 greeter.go
package greeting

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

go.mod

module go-experiments/project2

go 1.14

推荐阅读