Не удается импортировать локальный проект из другого проекта: не удается найти модуль, предоставляющий пакет - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть проект, над которым я работаю, с именем project1.
Пару месяцев go Я работал над project2, который содержит пакет с именем engine, и я хочу использовать его внутри project1.
Эти проекты являются локальными, поэтому я прочитал здесь , как импортировать локальные проекты и попробовал его, но получил ошибку:

Cannot resolve file `project2`

Одна интересная вещь заключается в том, что когда я набираю имя project2 в разделе import(..) Голанд идентифицирует его как модуль, но после того, как я нажимаю на него, я получил ошибку, которую невозможно устранить.

С Goland у меня есть возможность запустить sync packages of 'project1', но когда я нажал на нее, я также получил ошибку:

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

Я также попытался создать папку vendor в project1 и скопируйте и вставьте все project2 в папку vendor, но это все равно не помогло.

Есть идеи, почему это не решается?

1 Ответ

1 голос
/ 19 апреля 2020

Если у вас есть оба ваших проекта под $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

Дополнительная информация здесь

Быстрый пример (оба мои проекты находятся за пределами $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
...